From 3d13463c8b35d0938ac9f7f5f25ca8f511295a97 Mon Sep 17 00:00:00 2001 From: jeonseonghun Date: Mon, 6 May 2024 16:11:25 +0900 Subject: [PATCH 01/37] [Feat]: Network Infra --- AVIRO.xcodeproj/project.pbxproj | 52 ++++++++++ .../Network/DataTransferService.swift | 8 ++ AVIRO/Infrastructure/Network/Endpoint.swift | 50 ++++++++++ .../Network/NetworkConfigurable.swift | 30 ++++++ .../Network/NetworkService.swift | 8 ++ .../Response_Request/BodyEncoder.swift | 36 +++++++ .../Response_Request/RequestTable.swift | 96 +++++++++++++++++++ .../Response_Request/ResponseDecoder.swift | 41 ++++++++ AVIRO/Manager/APIManager/APITypes.swift | 16 ++-- .../ViewPresenter/HomeViewPresenter.swift | 1 - 10 files changed, 329 insertions(+), 9 deletions(-) create mode 100644 AVIRO/Infrastructure/Network/DataTransferService.swift create mode 100644 AVIRO/Infrastructure/Network/Endpoint.swift create mode 100644 AVIRO/Infrastructure/Network/NetworkConfigurable.swift create mode 100644 AVIRO/Infrastructure/Network/NetworkService.swift create mode 100644 AVIRO/Infrastructure/Network/Response_Request/BodyEncoder.swift create mode 100644 AVIRO/Infrastructure/Network/Response_Request/RequestTable.swift create mode 100644 AVIRO/Infrastructure/Network/Response_Request/ResponseDecoder.swift diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 3f2ebb01..de7f2f61 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -191,6 +191,13 @@ C5A9899E2A95A7940021B7C3 /* BookmarkManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A9899D2A95A7940021B7C3 /* BookmarkManager.swift */; }; C5B071E12A59454300AE709A /* BottomCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5B071E02A59454300AE709A /* BottomCell.swift */; }; C5B071E52A59B4AC00AE709A /* RegistrationField.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5B071E42A59B4AC00AE709A /* RegistrationField.swift */; }; + C5BA9DC92BE8AB8F004FA06E /* DataTransferService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DC82BE8AB8F004FA06E /* DataTransferService.swift */; }; + C5BA9DCB2BE8AB97004FA06E /* NetworkService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DCA2BE8AB97004FA06E /* NetworkService.swift */; }; + C5BA9DCD2BE8AB9E004FA06E /* Endpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DCC2BE8AB9E004FA06E /* Endpoint.swift */; }; + C5BA9DCF2BE8ABA8004FA06E /* NetworkConfigurable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DCE2BE8ABA8004FA06E /* NetworkConfigurable.swift */; }; + C5BA9DD22BE8AF80004FA06E /* BodyEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DD12BE8AF80004FA06E /* BodyEncoder.swift */; }; + C5BA9DD42BE8B39B004FA06E /* RequestTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DD32BE8B39B004FA06E /* RequestTable.swift */; }; + C5BA9DD62BE8B884004FA06E /* ResponseDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DD52BE8B884004FA06E /* ResponseDecoder.swift */; }; C5C20BAC2AD504D500855BBB /* AmplitudeUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C20BAB2AD504D500855BBB /* AmplitudeUtility.swift */; }; C5C290742A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C290732A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift */; }; C5C290772A85E4FF00ED5DCE /* PlaceHomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C290762A85E4FF00ED5DCE /* PlaceHomeView.swift */; }; @@ -473,6 +480,13 @@ C5A9899D2A95A7940021B7C3 /* BookmarkManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkManager.swift; sourceTree = ""; }; C5B071E02A59454300AE709A /* BottomCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomCell.swift; sourceTree = ""; }; C5B071E42A59B4AC00AE709A /* RegistrationField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegistrationField.swift; sourceTree = ""; }; + C5BA9DC82BE8AB8F004FA06E /* DataTransferService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTransferService.swift; sourceTree = ""; }; + C5BA9DCA2BE8AB97004FA06E /* NetworkService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkService.swift; sourceTree = ""; }; + C5BA9DCC2BE8AB9E004FA06E /* Endpoint.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Endpoint.swift; sourceTree = ""; }; + C5BA9DCE2BE8ABA8004FA06E /* NetworkConfigurable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkConfigurable.swift; sourceTree = ""; }; + C5BA9DD12BE8AF80004FA06E /* BodyEncoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BodyEncoder.swift; sourceTree = ""; }; + C5BA9DD32BE8B39B004FA06E /* RequestTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestTable.swift; sourceTree = ""; }; + C5BA9DD52BE8B884004FA06E /* ResponseDecoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseDecoder.swift; sourceTree = ""; }; C5C20BAB2AD504D500855BBB /* AmplitudeUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmplitudeUtility.swift; sourceTree = ""; }; C5C290732A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceSegmentedControlView.swift; sourceTree = ""; }; C5C290762A85E4FF00ED5DCE /* PlaceHomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceHomeView.swift; sourceTree = ""; }; @@ -922,6 +936,7 @@ C50367F32A1795BE0020C6BB /* Model */, C50367F22A1795B90020C6BB /* Manager */, C50367ED2A1791840020C6BB /* Scene */, + C5BA9DC62BE8AB22004FA06E /* Infrastructure */, ); path = AVIRO; sourceTree = ""; @@ -1660,6 +1675,36 @@ path = SubClass; sourceTree = ""; }; + C5BA9DC62BE8AB22004FA06E /* Infrastructure */ = { + isa = PBXGroup; + children = ( + C5BA9DC72BE8AB7A004FA06E /* Network */, + ); + path = Infrastructure; + sourceTree = ""; + }; + C5BA9DC72BE8AB7A004FA06E /* Network */ = { + isa = PBXGroup; + children = ( + C5BA9DD72BE8B88A004FA06E /* Response_Request */, + C5BA9DC82BE8AB8F004FA06E /* DataTransferService.swift */, + C5BA9DCA2BE8AB97004FA06E /* NetworkService.swift */, + C5BA9DCC2BE8AB9E004FA06E /* Endpoint.swift */, + C5BA9DCE2BE8ABA8004FA06E /* NetworkConfigurable.swift */, + ); + path = Network; + sourceTree = ""; + }; + C5BA9DD72BE8B88A004FA06E /* Response_Request */ = { + isa = PBXGroup; + children = ( + C5BA9DD32BE8B39B004FA06E /* RequestTable.swift */, + C5BA9DD12BE8AF80004FA06E /* BodyEncoder.swift */, + C5BA9DD52BE8B884004FA06E /* ResponseDecoder.swift */, + ); + path = Response_Request; + sourceTree = ""; + }; C5C290752A85E4EF00ED5DCE /* SegmentedControlSubView */ = { isa = PBXGroup; children = ( @@ -2288,6 +2333,7 @@ C567C1502A56611500D4B426 /* TopCell.swift in Sources */, C58FBF842AC26D3E00AB6EFC /* APIManagerProtocol.swift in Sources */, C50F6B042A6BCD6900E942F5 /* CategoryButton.swift in Sources */, + C5BA9DD22BE8AF80004FA06E /* BodyEncoder.swift in Sources */, C5D3E1602B9D942400DBB346 /* NoListButton.swift in Sources */, C58FBF862AC270A200AB6EFC /* APITypes.swift in Sources */, C562B6DF2B387AE200CE5D4C /* ChallengeInfoViewController.swift in Sources */, @@ -2319,6 +2365,7 @@ C5FD92E32A9C6C1E00CF4673 /* EditLocationAddressTextTableViewCell.swift in Sources */, C54BC0DB2A2C2D0D00B65439 /* UIColor+Extension.swift in Sources */, C52FA3432A175B20005E70DC /* AppDelegate.swift in Sources */, + C5BA9DCF2BE8ABA8004FA06E /* NetworkConfigurable.swift in Sources */, C5C290812A8616E500ED5DCE /* PlaceInfoView.swift in Sources */, C5B071E12A59454300AE709A /* BottomCell.swift in Sources */, C51000382AB5F3BD00F65C1F /* UIFont+Extension.swift in Sources */, @@ -2402,6 +2449,7 @@ C58EC7D42AB1B5C400401FF7 /* AVIROEditURL+DTO.swift in Sources */, C50F6B022A6BC8E400E942F5 /* EnrollField.swift in Sources */, C552D5342ABE8CA500933D8A /* AVIRODeleteAPI.swift in Sources */, + C5BA9DD62BE8B884004FA06E /* ResponseDecoder.swift in Sources */, C510005E2ABAA3C700F65C1F /* Enum+.swift in Sources */, C58FBF942AC2DB6D00AB6EFC /* KakaoKeywordResultDTO.swift in Sources */, C51B09B82A82155200916BBD /* MarkerModelCache.swift in Sources */, @@ -2422,6 +2470,7 @@ 6206A6562BA3C48A00056560 /* AVIROChallengeCommentDTO.swift in Sources */, C5166E4D2A945228003495AA /* MyData.swift in Sources */, C58B9AAE2A5675B9008AEAC3 /* TutorialViewController.swift in Sources */, + C5BA9DCD2BE8AB9E004FA06E /* Endpoint.swift in Sources */, C5FF13552A42C88D0026981D /* AVIROPlaceMenus+DTO.swift in Sources */, C55AE5C02BC6DCA50089DF85 /* ChallengeNameStickerView.swift in Sources */, C56E7A112A971504009CCAF2 /* ReportCellView.swift in Sources */, @@ -2438,6 +2487,7 @@ C50E6F6F2A8F10B500703B9E /* UILabel+Extension.swift in Sources */, C52066352A7F3FAE0038ECCD /* HistoryTableViewCell.swift in Sources */, C5C90EB72AA7078300AB3668 /* EditOperationHoursModel.swift in Sources */, + C5BA9DCB2BE8AB97004FA06E /* NetworkService.swift in Sources */, C54733D32BE20EF4004E961C /* SearchUtility.swift in Sources */, C528E4BA2A5F9A3E002BD72E /* ThridRegistrationViewController.swift in Sources */, C528E4BC2A5F9AB6002BD72E /* ThridRegistrationPresenter.swift in Sources */, @@ -2462,6 +2512,7 @@ C51BBAD52A78D53D00BF5B7C /* AVIROCheckPlace+DTO.swift in Sources */, C56857802A7113C600F52715 /* NormalTableViewCell.swift in Sources */, C549CDD82B9B538500CB6BF5 /* MyBookmarkCellModel.swift in Sources */, + C5BA9DD42BE8B39B004FA06E /* RequestTable.swift in Sources */, C52066312A7E4A580038ECCD /* AVIROMainSearchCompare+DTO.swift in Sources */, C5C9619F2A8DEB230016E2F8 /* ReviewWriteButton.swift in Sources */, C5D3E15A2B9D887600DBB346 /* AVIROTabBarType.swift in Sources */, @@ -2493,6 +2544,7 @@ C56857822A7113CF00F52715 /* RequestTableViewCell.swift in Sources */, C52CD2DD2BCA5C310031671B /* BlurEffectView.swift in Sources */, C5C2907B2A85E51B00ED5DCE /* PlaceReviewsView.swift in Sources */, + C5BA9DC92BE8AB8F004FA06E /* DataTransferService.swift in Sources */, C5A201BD2A98708800A54381 /* EditPlaceInfoPresenter.swift in Sources */, C59491D32AB0336100880B4B /* UIView(Animation)+Extension.swift in Sources */, C5D3E15C2B9D88F200DBB346 /* AVIROTabBarInteractionDelegate.swift in Sources */, diff --git a/AVIRO/Infrastructure/Network/DataTransferService.swift b/AVIRO/Infrastructure/Network/DataTransferService.swift new file mode 100644 index 00000000..545f21ae --- /dev/null +++ b/AVIRO/Infrastructure/Network/DataTransferService.swift @@ -0,0 +1,8 @@ +// +// DataTransferService.swift +// AVIRO +// +// Created by 전성훈 on 5/6/24. +// + +import Foundation diff --git a/AVIRO/Infrastructure/Network/Endpoint.swift b/AVIRO/Infrastructure/Network/Endpoint.swift new file mode 100644 index 00000000..9800ba40 --- /dev/null +++ b/AVIRO/Infrastructure/Network/Endpoint.swift @@ -0,0 +1,50 @@ +// +// Endpoint.swift +// AVIRO +// +// Created by 전성훈 on 5/6/24. +// + +import Foundation + +enum HTTPMethodType: String { + case get = "GET" + case head = "HEAD" + case post = "POST" + case put = "PUT" + case patch = "PATCH" + case delete = "DELETE" +} + +protocol ResponseRequestable: RequestTable { + associatedtype Response + + var responseDecoder: ResponseDecoder { get } +} + + +final class EndPoint: ResponseRequestable { + typealias Response = <#type#> + + var responseDecoder: any ResponseDecoder + + var path: String + + var isFullPath: Bool + + var method: HTTPMethodType + + var headerParameters: [String : String] + + var queryParametersEncodable: (any Encodable)? + + var queryParameters: [String : Any] + + var bodyParametersEncodable: (any Encodable)? + + var bodyParameters: [String : Any] + + var bodyEncoder: any BodyEncoder + + +} diff --git a/AVIRO/Infrastructure/Network/NetworkConfigurable.swift b/AVIRO/Infrastructure/Network/NetworkConfigurable.swift new file mode 100644 index 00000000..ba73fb68 --- /dev/null +++ b/AVIRO/Infrastructure/Network/NetworkConfigurable.swift @@ -0,0 +1,30 @@ +// +// NetworkConfigurable.swift +// AVIRO +// +// Created by 전성훈 on 5/6/24. +// + +import Foundation + +protocol NetworkConfigurable { + var baseURL: URL { get } + var headers: [String: String] { get } + var queryParameters: [String: String] { get } +} + +struct APIDataNetworkConfig: NetworkConfigurable { + let baseURL: URL + let headers: [String : String] + let queryParameters: [String : String] + + init( + baseURL: URL, + headers: [String : String] = [:], + queryParameters: [String : String] = [:] + ) { + self.baseURL = baseURL + self.headers = headers + self.queryParameters = queryParameters + } +} diff --git a/AVIRO/Infrastructure/Network/NetworkService.swift b/AVIRO/Infrastructure/Network/NetworkService.swift new file mode 100644 index 00000000..c6c798d6 --- /dev/null +++ b/AVIRO/Infrastructure/Network/NetworkService.swift @@ -0,0 +1,8 @@ +// +// NetworkService.swift +// AVIRO +// +// Created by 전성훈 on 5/6/24. +// + +import Foundation diff --git a/AVIRO/Infrastructure/Network/Response_Request/BodyEncoder.swift b/AVIRO/Infrastructure/Network/Response_Request/BodyEncoder.swift new file mode 100644 index 00000000..2ab33463 --- /dev/null +++ b/AVIRO/Infrastructure/Network/Response_Request/BodyEncoder.swift @@ -0,0 +1,36 @@ +// +// BodyEncoder.swift +// AVIRO +// +// Created by 전성훈 on 5/6/24. +// + +import Foundation + +protocol BodyEncoder { + func encode(_ parameters: [String: Any]) -> Data? +} + +struct JSONBodyEncoder: BodyEncoder { + func encode(_ parameters: [String : Any]) -> Data? { + return try? JSONSerialization.data(withJSONObject: parameters) + } +} + +struct AsciiBodyEncoder: BodyEncoder { + func encode(_ parameters: [String : Any]) -> Data? { + return parameters.queryString + .data( + using: String.Encoding.ascii, + allowLossyConversion: true + ) + } +} + +private extension Dictionary { + var queryString: String { + return self.map { "\($0.key)=\($0.value)" } + .joined(separator: "&") + .addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) ?? "" + } +} diff --git a/AVIRO/Infrastructure/Network/Response_Request/RequestTable.swift b/AVIRO/Infrastructure/Network/Response_Request/RequestTable.swift new file mode 100644 index 00000000..8870ef28 --- /dev/null +++ b/AVIRO/Infrastructure/Network/Response_Request/RequestTable.swift @@ -0,0 +1,96 @@ +// +// RequestTable.swift +// AVIRO +// +// Created by 전성훈 on 5/6/24. +// + +import Foundation + +enum RequestGenerationError: Error { + case components +} + +protocol RequestTable { + var path: String { get } + var isFullPath: Bool { get } + var method: HTTPMethodType { get } + var headerParameters: [String: String] { get } + var queryParametersEncodable: Encodable? { get } + var queryParameters: [String: Any] { get } + var bodyParametersEncodable: Encodable? { get } + var bodyParameters: [String: Any] { get } + var bodyEncoder: BodyEncoder { get } + + func urlRequest(with networkConfig: NetworkConfigurable) throws -> URLRequest +} + +extension RequestTable { + func url(with config: NetworkConfigurable) throws -> URL { + let baseURL = config.baseURL.absoluteString.last != "/" ? config.baseURL.absoluteString + "/" : config.baseURL.absoluteString + + let endpoint = isFullPath ? path : baseURL.appending(path) + + guard var urlComponents = URLComponents(string: endpoint) else { throw RequestGenerationError.components + } + + var urlQueryItmes = [URLQueryItem]() + + let queryParameters = try queryParametersEncodable?.toDictionary() ?? self.queryParameters + + config.queryParameters.forEach { + urlQueryItmes.append( + URLQueryItem( + name: $0.key, + value: $0.value + ) + ) + } + + queryParameters.forEach { + urlQueryItmes.append( + URLQueryItem( + name: $0.key, + value: "\($0.value)" + ) + ) + } + + urlComponents.queryItems = !urlQueryItmes.isEmpty ? urlQueryItmes : nil + + guard let url = urlComponents.url else { throw + RequestGenerationError.components } + + return url + } + + func urlRequest(with config: NetworkConfigurable) throws -> URLRequest { + let url = try self.url(with: config) + var urlRequest = URLRequest(url: url) + var allHeaders: [String: String] = config.headers + + headerParameters.forEach { + allHeaders.updateValue($1, forKey: $0) + } + + let bodyParameters = try bodyParametersEncodable?.toDictionary() ?? self.bodyParameters + + if !bodyParameters.isEmpty { + urlRequest.httpBody = bodyEncoder.encode(bodyParameters) + } + + urlRequest.httpMethod = method.rawValue + urlRequest.allHTTPHeaderFields = allHeaders + + return urlRequest + } +} + +private extension Encodable { + func toDictionary() throws -> [String: Any]? { + let data = try JSONEncoder().encode(self) + let jsonData = try JSONSerialization.jsonObject(with: data) + + return jsonData as? [String: Any] + } +} diff --git a/AVIRO/Infrastructure/Network/Response_Request/ResponseDecoder.swift b/AVIRO/Infrastructure/Network/Response_Request/ResponseDecoder.swift new file mode 100644 index 00000000..8f203718 --- /dev/null +++ b/AVIRO/Infrastructure/Network/Response_Request/ResponseDecoder.swift @@ -0,0 +1,41 @@ +// +// ResponseDecoder.swift +// AVIRO +// +// Created by 전성훈 on 5/6/24. +// + +import Foundation + +protocol ResponseDecoder { + func decode(_ data: Data) throws -> T +} + +final class JSONResponseDecoder: ResponseDecoder { + private let jsonDecoder = JSONDecoder() + + init() { } + + func decode(_ data: Data) throws -> T { + return try jsonDecoder.decode(T.self, from: data) + } +} + +final class RawDataResponseDecoder: ResponseDecoder { + + init() { } + + enum CodingKeys: String, CodingKey { + case `default` = "" + } + + func decode(_ data: Data) throws -> T { + if T.self is Data.Type, let data = data as? T { + return data + } else { + let context = DecodingError.Context(codingPath: [CodingKeys.default], debugDescription: "Expected Data type") + + throw Swift.DecodingError.typeMismatch(T.self, context) + } + } +} diff --git a/AVIRO/Manager/APIManager/APITypes.swift b/AVIRO/Manager/APIManager/APITypes.swift index 79adeade..0781d098 100644 --- a/AVIRO/Manager/APIManager/APITypes.swift +++ b/AVIRO/Manager/APIManager/APITypes.swift @@ -45,11 +45,11 @@ enum APIError: Error { } } -enum HTTPMethodType: String { - case get = "GET" - case head = "HEAD" - case post = "POST" - case put = "PUT" - case patch = "PATCH" - case delete = "DELETE" -} +//enum HTTPMethodType: String { +// case get = "GET" +// case head = "HEAD" +// case post = "POST" +// case put = "PUT" +// case patch = "PATCH" +// case delete = "DELETE" +//} diff --git a/AVIRO/Scene/Feature/Home/ViewPresenter/HomeViewPresenter.swift b/AVIRO/Scene/Feature/Home/ViewPresenter/HomeViewPresenter.swift index 729d80de..b4046d59 100644 --- a/AVIRO/Scene/Feature/Home/ViewPresenter/HomeViewPresenter.swift +++ b/AVIRO/Scene/Feature/Home/ViewPresenter/HomeViewPresenter.swift @@ -391,7 +391,6 @@ final class HomeViewPresenter: NSObject { marker.captionMinZoom = 14 marker.captionRequestedWidth = 80 marker.captionOffset = 3 - marker.isHideCollidedMarkers = true marker.makeIcon(veganType: veganType, categoryType: categoryType) marker.touchHandler = { [weak self] _ in From fd6a04ba5427f32f2298d6bf127e2593defa9f6d Mon Sep 17 00:00:00 2001 From: jeonseonghun Date: Thu, 9 May 2024 18:25:36 +0900 Subject: [PATCH 02/37] =?UTF-8?q?[FEAT]:=20Network=20Infra=20=EC=84=A4?= =?UTF-8?q?=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 38 ++++++- .../DataTransfer/DataTransferError.swift | 15 +++ .../DataTransferService.swift | 0 AVIRO/Infrastructure/Network/Endpoint.swift | 50 --------- .../Network/NetworkService.swift | 8 -- .../Network/NetworkService/Endpoint.swift | 62 +++++++++++ .../NetworkConfigurable.swift | 8 +- .../NetworkService/NetworkErrorLogger.swift | 58 ++++++++++ .../NetworkService/NetworkService.swift | 101 ++++++++++++++++++ .../NetworkSessionManager.swift | 33 ++++++ .../Response_Request/BodyEncoder.swift | 0 .../Response_Request/RequestTable.swift | 0 .../Response_Request/ResponseDecoder.swift | 5 +- 13 files changed, 310 insertions(+), 68 deletions(-) create mode 100644 AVIRO/Infrastructure/Network/DataTransfer/DataTransferError.swift rename AVIRO/Infrastructure/Network/{ => DataTransfer}/DataTransferService.swift (100%) delete mode 100644 AVIRO/Infrastructure/Network/Endpoint.swift delete mode 100644 AVIRO/Infrastructure/Network/NetworkService.swift create mode 100644 AVIRO/Infrastructure/Network/NetworkService/Endpoint.swift rename AVIRO/Infrastructure/Network/{ => NetworkService}/NetworkConfigurable.swift (74%) create mode 100644 AVIRO/Infrastructure/Network/NetworkService/NetworkErrorLogger.swift create mode 100644 AVIRO/Infrastructure/Network/NetworkService/NetworkService.swift create mode 100644 AVIRO/Infrastructure/Network/NetworkService/NetworkSessionManager.swift rename AVIRO/Infrastructure/Network/{ => NetworkService}/Response_Request/BodyEncoder.swift (100%) rename AVIRO/Infrastructure/Network/{ => NetworkService}/Response_Request/RequestTable.swift (100%) rename AVIRO/Infrastructure/Network/{ => NetworkService}/Response_Request/ResponseDecoder.swift (83%) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index de7f2f61..17e04d84 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -198,6 +198,9 @@ C5BA9DD22BE8AF80004FA06E /* BodyEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DD12BE8AF80004FA06E /* BodyEncoder.swift */; }; C5BA9DD42BE8B39B004FA06E /* RequestTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DD32BE8B39B004FA06E /* RequestTable.swift */; }; C5BA9DD62BE8B884004FA06E /* ResponseDecoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DD52BE8B884004FA06E /* ResponseDecoder.swift */; }; + C5BA9DF22BECC8F9004FA06E /* NetworkSessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DF12BECC8F9004FA06E /* NetworkSessionManager.swift */; }; + C5BA9DF42BECC902004FA06E /* NetworkErrorLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DF32BECC902004FA06E /* NetworkErrorLogger.swift */; }; + C5BA9DF62BECCD58004FA06E /* DataTransferError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DF52BECCD58004FA06E /* DataTransferError.swift */; }; C5C20BAC2AD504D500855BBB /* AmplitudeUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C20BAB2AD504D500855BBB /* AmplitudeUtility.swift */; }; C5C290742A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C290732A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift */; }; C5C290772A85E4FF00ED5DCE /* PlaceHomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C290762A85E4FF00ED5DCE /* PlaceHomeView.swift */; }; @@ -487,6 +490,9 @@ C5BA9DD12BE8AF80004FA06E /* BodyEncoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BodyEncoder.swift; sourceTree = ""; }; C5BA9DD32BE8B39B004FA06E /* RequestTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestTable.swift; sourceTree = ""; }; C5BA9DD52BE8B884004FA06E /* ResponseDecoder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResponseDecoder.swift; sourceTree = ""; }; + C5BA9DF12BECC8F9004FA06E /* NetworkSessionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSessionManager.swift; sourceTree = ""; }; + C5BA9DF32BECC902004FA06E /* NetworkErrorLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkErrorLogger.swift; sourceTree = ""; }; + C5BA9DF52BECCD58004FA06E /* DataTransferError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTransferError.swift; sourceTree = ""; }; C5C20BAB2AD504D500855BBB /* AmplitudeUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmplitudeUtility.swift; sourceTree = ""; }; C5C290732A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceSegmentedControlView.swift; sourceTree = ""; }; C5C290762A85E4FF00ED5DCE /* PlaceHomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceHomeView.swift; sourceTree = ""; }; @@ -1686,11 +1692,8 @@ C5BA9DC72BE8AB7A004FA06E /* Network */ = { isa = PBXGroup; children = ( - C5BA9DD72BE8B88A004FA06E /* Response_Request */, - C5BA9DC82BE8AB8F004FA06E /* DataTransferService.swift */, - C5BA9DCA2BE8AB97004FA06E /* NetworkService.swift */, - C5BA9DCC2BE8AB9E004FA06E /* Endpoint.swift */, - C5BA9DCE2BE8ABA8004FA06E /* NetworkConfigurable.swift */, + C5BA9DF72BECCDB5004FA06E /* DataTransfer */, + C5BA9DEF2BECC8BD004FA06E /* NetworkService */, ); path = Network; sourceTree = ""; @@ -1705,6 +1708,28 @@ path = Response_Request; sourceTree = ""; }; + C5BA9DEF2BECC8BD004FA06E /* NetworkService */ = { + isa = PBXGroup; + children = ( + C5BA9DD72BE8B88A004FA06E /* Response_Request */, + C5BA9DCC2BE8AB9E004FA06E /* Endpoint.swift */, + C5BA9DCE2BE8ABA8004FA06E /* NetworkConfigurable.swift */, + C5BA9DCA2BE8AB97004FA06E /* NetworkService.swift */, + C5BA9DF12BECC8F9004FA06E /* NetworkSessionManager.swift */, + C5BA9DF32BECC902004FA06E /* NetworkErrorLogger.swift */, + ); + path = NetworkService; + sourceTree = ""; + }; + C5BA9DF72BECCDB5004FA06E /* DataTransfer */ = { + isa = PBXGroup; + children = ( + C5BA9DF52BECCD58004FA06E /* DataTransferError.swift */, + C5BA9DC82BE8AB8F004FA06E /* DataTransferService.swift */, + ); + path = DataTransfer; + sourceTree = ""; + }; C5C290752A85E4EF00ED5DCE /* SegmentedControlSubView */ = { isa = PBXGroup; children = ( @@ -2330,6 +2355,7 @@ C513854C2AAB3B52001AB827 /* NickNameChangeblePresenter.swift in Sources */, C5D93DA12A581F5A00629C39 /* FirstRegistrationPresenter.swift in Sources */, C50B18CD2B94D696005DECDC /* MyPlaceCellModel.swift in Sources */, + C5BA9DF22BECC8F9004FA06E /* NetworkSessionManager.swift in Sources */, C567C1502A56611500D4B426 /* TopCell.swift in Sources */, C58FBF842AC26D3E00AB6EFC /* APIManagerProtocol.swift in Sources */, C50F6B042A6BCD6900E942F5 /* CategoryButton.swift in Sources */, @@ -2391,6 +2417,7 @@ C50F6AFB2A68FFC300E942F5 /* EnrollVeganDetailView.swift in Sources */, C5C90EB92AA78D0200AB3668 /* EditOperationHourChangebleView.swift in Sources */, C5A201C72A98A6D200A54381 /* EditOperatingHoursView.swift in Sources */, + C5BA9DF62BECCD58004FA06E /* DataTransferError.swift in Sources */, C5C290772A85E4FF00ED5DCE /* PlaceHomeView.swift in Sources */, C564DAB32BA57240002174B4 /* AVIROWellcome+DTO.swift in Sources */, C5D93D9F2A581EC800629C39 /* FirstRegistrationViewController.swift in Sources */, @@ -2411,6 +2438,7 @@ C5503B5E2B9F55D70050643F /* UIView+Extension.swift in Sources */, C5538AAF2A1BB81200661DE2 /* AVIROEnrollPlace+DTO.swift in Sources */, C51000552AB8123600F65C1F /* AVIROReportReview+DTO.swift in Sources */, + C5BA9DF42BECC902004FA06E /* NetworkErrorLogger.swift in Sources */, C50F6AF32A68FD0A00E942F5 /* EnrollPlaceViewController.swift in Sources */, C5732C7E2A41D42700CDC499 /* RequestTableFieldModel.swift in Sources */, C5C961982A8DA5880016E2F8 /* EditInfoButton.swift in Sources */, diff --git a/AVIRO/Infrastructure/Network/DataTransfer/DataTransferError.swift b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferError.swift new file mode 100644 index 00000000..52db6724 --- /dev/null +++ b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferError.swift @@ -0,0 +1,15 @@ +// +// DataTransferError.swift +// AVIRO +// +// Created by 전성훈 on 5/9/24. +// + +import Foundation + +enum DataTransferError: Error { + case noResponse + case parsing(Error) + case networkFailure(NetworkError) + case resolveNetworkFailure(Error) +} diff --git a/AVIRO/Infrastructure/Network/DataTransferService.swift b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferService.swift similarity index 100% rename from AVIRO/Infrastructure/Network/DataTransferService.swift rename to AVIRO/Infrastructure/Network/DataTransfer/DataTransferService.swift diff --git a/AVIRO/Infrastructure/Network/Endpoint.swift b/AVIRO/Infrastructure/Network/Endpoint.swift deleted file mode 100644 index 9800ba40..00000000 --- a/AVIRO/Infrastructure/Network/Endpoint.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// Endpoint.swift -// AVIRO -// -// Created by 전성훈 on 5/6/24. -// - -import Foundation - -enum HTTPMethodType: String { - case get = "GET" - case head = "HEAD" - case post = "POST" - case put = "PUT" - case patch = "PATCH" - case delete = "DELETE" -} - -protocol ResponseRequestable: RequestTable { - associatedtype Response - - var responseDecoder: ResponseDecoder { get } -} - - -final class EndPoint: ResponseRequestable { - typealias Response = <#type#> - - var responseDecoder: any ResponseDecoder - - var path: String - - var isFullPath: Bool - - var method: HTTPMethodType - - var headerParameters: [String : String] - - var queryParametersEncodable: (any Encodable)? - - var queryParameters: [String : Any] - - var bodyParametersEncodable: (any Encodable)? - - var bodyParameters: [String : Any] - - var bodyEncoder: any BodyEncoder - - -} diff --git a/AVIRO/Infrastructure/Network/NetworkService.swift b/AVIRO/Infrastructure/Network/NetworkService.swift deleted file mode 100644 index c6c798d6..00000000 --- a/AVIRO/Infrastructure/Network/NetworkService.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// NetworkService.swift -// AVIRO -// -// Created by 전성훈 on 5/6/24. -// - -import Foundation diff --git a/AVIRO/Infrastructure/Network/NetworkService/Endpoint.swift b/AVIRO/Infrastructure/Network/NetworkService/Endpoint.swift new file mode 100644 index 00000000..6cc026bc --- /dev/null +++ b/AVIRO/Infrastructure/Network/NetworkService/Endpoint.swift @@ -0,0 +1,62 @@ +// +// Endpoint.swift +// AVIRO +// +// Created by 전성훈 on 5/6/24. +// + +import Foundation + +enum HTTPMethodType: String { + case get = "GET" + case head = "HEAD" + case post = "POST" + case put = "PUT" + case patch = "PATCH" + case delete = "DELETE" +} + +protocol ResponseRequestable: RequestTable { + associatedtype Response + + var responseDecoder: ResponseDecoder { get } +} + +final class EndPoint: ResponseRequestable { + typealias Response = R + + let path: String + let isFullPath: Bool + let method: HTTPMethodType + let headerParameters: [String: String] + let queryParametersEncodable: Encodable? + let queryParameters: [String: Any] + let bodyParametersEncodable: Encodable? + let bodyParameters: [String: Any] + let bodyEncoder: BodyEncoder + let responseDecoder: ResponseDecoder + + init( + path: String, + isFullPath: Bool = false, + method: HTTPMethodType, + headerParameters: [String: String] = [:], + queryParametersEncodable: Encodable? = nil, + queryParameters: [String: Any] = [:], + bodyParametersEncodable: Encodable? = nil, + bodyParameters: [String: Any] = [:], + bodyEncoder: BodyEncoder = JSONBodyEncoder(), + responseDecoder: ResponseDecoder = JSONResponseDecoder() + ) { + self.path = path + self.isFullPath = isFullPath + self.method = method + self.headerParameters = headerParameters + self.queryParametersEncodable = queryParametersEncodable + self.queryParameters = queryParameters + self.bodyParametersEncodable = bodyParametersEncodable + self.bodyParameters = bodyParameters + self.bodyEncoder = bodyEncoder + self.responseDecoder = responseDecoder + } +} diff --git a/AVIRO/Infrastructure/Network/NetworkConfigurable.swift b/AVIRO/Infrastructure/Network/NetworkService/NetworkConfigurable.swift similarity index 74% rename from AVIRO/Infrastructure/Network/NetworkConfigurable.swift rename to AVIRO/Infrastructure/Network/NetworkService/NetworkConfigurable.swift index ba73fb68..ab229b03 100644 --- a/AVIRO/Infrastructure/Network/NetworkConfigurable.swift +++ b/AVIRO/Infrastructure/Network/NetworkService/NetworkConfigurable.swift @@ -15,13 +15,13 @@ protocol NetworkConfigurable { struct APIDataNetworkConfig: NetworkConfigurable { let baseURL: URL - let headers: [String : String] - let queryParameters: [String : String] + let headers: [String: String] + let queryParameters: [String: String] init( baseURL: URL, - headers: [String : String] = [:], - queryParameters: [String : String] = [:] + headers: [String: String] = [:], + queryParameters: [String: String] = [:] ) { self.baseURL = baseURL self.headers = headers diff --git a/AVIRO/Infrastructure/Network/NetworkService/NetworkErrorLogger.swift b/AVIRO/Infrastructure/Network/NetworkService/NetworkErrorLogger.swift new file mode 100644 index 00000000..3ec7551d --- /dev/null +++ b/AVIRO/Infrastructure/Network/NetworkService/NetworkErrorLogger.swift @@ -0,0 +1,58 @@ +// +// NetworkErrorLogger.swift +// AVIRO +// +// Created by 전성훈 on 5/9/24. +// + +import Foundation + +protocol NetworkErrorLoggerProtocol { + func log(request: URLRequest) + func log(responseData data: Data?, response: URLResponse?) + func log(error: Error) +} + +final class NetworkErrorLogger: NetworkErrorLoggerProtocol { + func log(request: URLRequest) { + print("--------") + print("request: \(request.url!)") + print("headers: \(request.allHTTPHeaderFields!)") + print("method: \(request.httpMethod!)") + if let httpBody = request.httpBody, + let result = ((try? JSONSerialization.jsonObject( + with: httpBody, + options: [] + ) as? [String: AnyObject] + ) as [String: AnyObject]??) { + printIfDebug("body: \(String(describing: result))") + } else if let httpBody = request.httpBody, + let resultString = String(data: httpBody, encoding: .utf8) { + printIfDebug("body: \(String(describing: resultString))") + } + print("--------") + } + + func log(responseData data: Data?, response: URLResponse?) { + guard let data = data else { return } + + print("--------") + + if let dataDict = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] { + printIfDebug("responseData: \(String(describing: dataDict))") + } + print("--------") + } + + func log(error: Error) { + print("--------") + printIfDebug("\(error)") + print("--------") + } +} + +private func printIfDebug(_ string: String) { + #if DEBUG + print(string) + #endif +} diff --git a/AVIRO/Infrastructure/Network/NetworkService/NetworkService.swift b/AVIRO/Infrastructure/Network/NetworkService/NetworkService.swift new file mode 100644 index 00000000..68e84e71 --- /dev/null +++ b/AVIRO/Infrastructure/Network/NetworkService/NetworkService.swift @@ -0,0 +1,101 @@ +// +// NetworkService.swift +// AVIRO +// +// Created by 전성훈 on 5/6/24. +// + +import Foundation + +enum NetworkError: Error { + case error(statusCode: Int, data: Data?) + case notConnected + case cancelled + case generic(Error) + case urlGeneration +} + +protocol NetworkCancellable { + func cancel() +} + +extension URLSessionTask: NetworkCancellable { } + +protocol NetworkServiceProtocol { + typealias CompletionHandler = (Result) -> Void + + func request( + endPoint: RequestTable, + completion: @escaping CompletionHandler + ) -> NetworkCancellable? +} + +final class NetworkService { + private let config: NetworkConfigurable + private let sessionManager: NetworkSessionManagerProtocol + private let logger: NetworkErrorLoggerProtocol + + init( + config: NetworkConfigurable, + sessionManager: NetworkSessionManager = NetworkSessionManager(), + logger: NetworkErrorLogger + ) { + self.config = config + self.sessionManager = sessionManager + self.logger = logger + } + + private func request( + _ request: URLRequest, + completion: @escaping CompletionHandler + ) -> NetworkCancellable { + let sessionDataTask = sessionManager.request(request) { data, response, requestError in + if let requestError = requestError { + var error: NetworkError + if let response = response as? HTTPURLResponse { + error = .error(statusCode: response.statusCode, data: data) + } else { + error = self.resolve(error: requestError) + } + + self.logger.log(error: error) + + completion(.failure(error)) + } else { + self.logger.log(responseData: data, response: response) + + completion(.success(data)) + } + } + + logger.log(request: request) + + return sessionDataTask + } + + private func resolve(error: Error) -> NetworkError { + let code = URLError.Code(rawValue: (error as NSError).code) + + switch code { + case .notConnectedToInternet: return .notConnected + case .cancelled: return .cancelled + default: return .generic(error) + } + } +} + +extension NetworkService: NetworkServiceProtocol { + func request( + endPoint: RequestTable, + completion: @escaping CompletionHandler + ) -> NetworkCancellable? { + do { + let urlRequest = try endPoint.urlRequest(with: config) + + return request(urlRequest, completion: completion) + } catch { + completion(.failure(.urlGeneration)) + return nil + } + } +} diff --git a/AVIRO/Infrastructure/Network/NetworkService/NetworkSessionManager.swift b/AVIRO/Infrastructure/Network/NetworkService/NetworkSessionManager.swift new file mode 100644 index 00000000..bc2d37b5 --- /dev/null +++ b/AVIRO/Infrastructure/Network/NetworkService/NetworkSessionManager.swift @@ -0,0 +1,33 @@ +// +// NetworkSessionManager.swift +// AVIRO +// +// Created by 전성훈 on 5/9/24. +// + +import Foundation + +protocol NetworkSessionManagerProtocol { + typealias CompletionHandler = (Data?, URLResponse?, Error?) -> Void + + func request( + _ request: URLRequest, + completion: @escaping CompletionHandler + ) -> NetworkCancellable +} + +final class NetworkSessionManager: NetworkSessionManagerProtocol { + func request( + _ request: URLRequest, + completion: @escaping CompletionHandler + ) -> NetworkCancellable { + let task = URLSession.shared.dataTask( + with: request, + completionHandler: completion + ) + task.resume() + + return task + } +} + diff --git a/AVIRO/Infrastructure/Network/Response_Request/BodyEncoder.swift b/AVIRO/Infrastructure/Network/NetworkService/Response_Request/BodyEncoder.swift similarity index 100% rename from AVIRO/Infrastructure/Network/Response_Request/BodyEncoder.swift rename to AVIRO/Infrastructure/Network/NetworkService/Response_Request/BodyEncoder.swift diff --git a/AVIRO/Infrastructure/Network/Response_Request/RequestTable.swift b/AVIRO/Infrastructure/Network/NetworkService/Response_Request/RequestTable.swift similarity index 100% rename from AVIRO/Infrastructure/Network/Response_Request/RequestTable.swift rename to AVIRO/Infrastructure/Network/NetworkService/Response_Request/RequestTable.swift diff --git a/AVIRO/Infrastructure/Network/Response_Request/ResponseDecoder.swift b/AVIRO/Infrastructure/Network/NetworkService/Response_Request/ResponseDecoder.swift similarity index 83% rename from AVIRO/Infrastructure/Network/Response_Request/ResponseDecoder.swift rename to AVIRO/Infrastructure/Network/NetworkService/Response_Request/ResponseDecoder.swift index 8f203718..1c7e0889 100644 --- a/AVIRO/Infrastructure/Network/Response_Request/ResponseDecoder.swift +++ b/AVIRO/Infrastructure/Network/NetworkService/Response_Request/ResponseDecoder.swift @@ -33,7 +33,10 @@ final class RawDataResponseDecoder: ResponseDecoder { if T.self is Data.Type, let data = data as? T { return data } else { - let context = DecodingError.Context(codingPath: [CodingKeys.default], debugDescription: "Expected Data type") + let context = DecodingError.Context( + codingPath: [CodingKeys.default], + debugDescription: "Expected Data type" + ) throw Swift.DecodingError.typeMismatch(T.self, context) } From 730efcffa8afa074aed4de0c3450e6987b5bc9fb Mon Sep 17 00:00:00 2001 From: jeonseonghun Date: Thu, 9 May 2024 23:44:14 +0900 Subject: [PATCH 03/37] =?UTF-8?q?[Feat]:=20DataTransfer=20Service=20?= =?UTF-8?q?=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Network/DataTransfer/DataTransferErrorLogger.swift | 8 ++++++++ .../ResponseDecoder.swift | 0 2 files changed, 8 insertions(+) create mode 100644 AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift rename AVIRO/Infrastructure/Network/{NetworkService/Response_Request => DataTransfer}/ResponseDecoder.swift (100%) diff --git a/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift new file mode 100644 index 00000000..b4fed283 --- /dev/null +++ b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift @@ -0,0 +1,8 @@ +// +// DataTransferErrorLogger.swift +// AVIRO +// +// Created by 전성훈 on 5/9/24. +// + +import Foundation diff --git a/AVIRO/Infrastructure/Network/NetworkService/Response_Request/ResponseDecoder.swift b/AVIRO/Infrastructure/Network/DataTransfer/ResponseDecoder.swift similarity index 100% rename from AVIRO/Infrastructure/Network/NetworkService/Response_Request/ResponseDecoder.swift rename to AVIRO/Infrastructure/Network/DataTransfer/ResponseDecoder.swift From 5e43b23ed45db728f3e6b4814801937a9ccf4e98 Mon Sep 17 00:00:00 2001 From: jeonseonghun Date: Thu, 9 May 2024 23:52:53 +0900 Subject: [PATCH 04/37] =?UTF-8?q?[Feat]:=20Infra=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 6 +- .../DataTransferErrorLogger.swift | 17 ++ .../DataTransfer/DataTransferService.swift | 163 ++++++++++++++++++ 3 files changed, 185 insertions(+), 1 deletion(-) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 17e04d84..0f36bbf9 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -201,6 +201,7 @@ C5BA9DF22BECC8F9004FA06E /* NetworkSessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DF12BECC8F9004FA06E /* NetworkSessionManager.swift */; }; C5BA9DF42BECC902004FA06E /* NetworkErrorLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DF32BECC902004FA06E /* NetworkErrorLogger.swift */; }; C5BA9DF62BECCD58004FA06E /* DataTransferError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DF52BECCD58004FA06E /* DataTransferError.swift */; }; + C5BA9DFB2BED136A004FA06E /* DataTransferErrorLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DFA2BED136A004FA06E /* DataTransferErrorLogger.swift */; }; C5C20BAC2AD504D500855BBB /* AmplitudeUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C20BAB2AD504D500855BBB /* AmplitudeUtility.swift */; }; C5C290742A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C290732A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift */; }; C5C290772A85E4FF00ED5DCE /* PlaceHomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C290762A85E4FF00ED5DCE /* PlaceHomeView.swift */; }; @@ -493,6 +494,7 @@ C5BA9DF12BECC8F9004FA06E /* NetworkSessionManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkSessionManager.swift; sourceTree = ""; }; C5BA9DF32BECC902004FA06E /* NetworkErrorLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkErrorLogger.swift; sourceTree = ""; }; C5BA9DF52BECCD58004FA06E /* DataTransferError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTransferError.swift; sourceTree = ""; }; + C5BA9DFA2BED136A004FA06E /* DataTransferErrorLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTransferErrorLogger.swift; sourceTree = ""; }; C5C20BAB2AD504D500855BBB /* AmplitudeUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmplitudeUtility.swift; sourceTree = ""; }; C5C290732A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceSegmentedControlView.swift; sourceTree = ""; }; C5C290762A85E4FF00ED5DCE /* PlaceHomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceHomeView.swift; sourceTree = ""; }; @@ -1703,7 +1705,6 @@ children = ( C5BA9DD32BE8B39B004FA06E /* RequestTable.swift */, C5BA9DD12BE8AF80004FA06E /* BodyEncoder.swift */, - C5BA9DD52BE8B884004FA06E /* ResponseDecoder.swift */, ); path = Response_Request; sourceTree = ""; @@ -1724,7 +1725,9 @@ C5BA9DF72BECCDB5004FA06E /* DataTransfer */ = { isa = PBXGroup; children = ( + C5BA9DD52BE8B884004FA06E /* ResponseDecoder.swift */, C5BA9DF52BECCD58004FA06E /* DataTransferError.swift */, + C5BA9DFA2BED136A004FA06E /* DataTransferErrorLogger.swift */, C5BA9DC82BE8AB8F004FA06E /* DataTransferService.swift */, ); path = DataTransfer; @@ -2381,6 +2384,7 @@ C58FBF902AC2B83A00AB6EFC /* AVIROAPIManagerProtocol.swift in Sources */, C5DCBC9F2B91D9FE003502BA /* MyCommentListViewModel.swift in Sources */, C50F6AF52A68FD6300E942F5 /* EnrollPlacePresenter.swift in Sources */, + C5BA9DFB2BED136A004FA06E /* DataTransferErrorLogger.swift in Sources */, C50DB7572A9B8DF80078B501 /* EditLocationAddressTextView.swift in Sources */, C595ACD12A84A4EB00D35123 /* PlaceSummaryView.swift in Sources */, C520663A2A808DC40038ECCD /* PlaceListHeaderView.swift in Sources */, diff --git a/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift index b4fed283..4415e525 100644 --- a/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift +++ b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift @@ -6,3 +6,20 @@ // import Foundation + +protocol DataTransferErrorLoggerProtocol { + func log(error: Error) +} + +final class DataTransferErrorLogger: DataTransferErrorLoggerProtocol { + func log(error: Error) { + printIfDebug("------------") + printIfDebug("\(error)") + } +} + +private func printIfDebug(_ string: String) { + #if DEBUG + print(string) + #endif +} diff --git a/AVIRO/Infrastructure/Network/DataTransfer/DataTransferService.swift b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferService.swift index 545f21ae..e6990c73 100644 --- a/AVIRO/Infrastructure/Network/DataTransfer/DataTransferService.swift +++ b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferService.swift @@ -6,3 +6,166 @@ // import Foundation + +protocol DataTransferDispatchQueue { + func asyncExecute(work: @escaping () -> Void) +} + +extension DispatchQueue: DataTransferDispatchQueue { + func asyncExecute(work: @escaping () -> Void) { + async(group: nil, execute: work) + } +} + +protocol DataTransferServiceProtocol { + typealias CompletionHandler = (Result) -> Void + + @discardableResult + func request( + with endpoint: E, + on queue: DataTransferDispatchQueue, + completion: @escaping CompletionHandler + ) -> NetworkCancellable? where E.Response == T + + @discardableResult + func request( + with endpoint: E, + completion: @escaping CompletionHandler + ) -> NetworkCancellable? where E.Response == T + + @discardableResult + func request( + with endpoint: E, + on queue: DataTransferDispatchQueue, + completion: @escaping CompletionHandler + ) -> NetworkCancellable? where E.Response == Void + + @discardableResult + func request( + with endpoint: E, + completion: @escaping CompletionHandler + ) -> NetworkCancellable? where E.Response == Void +} + +protocol DataTransferErrorResolverProtocol { + func resolve(error: NetworkError) -> Error +} + +final class DataTransferService { + private let networkService: NetworkService + private let errorResolver: DataTransferErrorResolverProtocol + private let errorLogger: DataTransferErrorLoggerProtocol + + init( + networkService: NetworkService, + errorResolver: DataTransferErrorResolverProtocol, + errorLogger: DataTransferErrorLoggerProtocol + ) { + self.networkService = networkService + self.errorResolver = errorResolver + self.errorLogger = errorLogger + } +} + +extension DataTransferService: DataTransferServiceProtocol { + func request( + with endpoint: E, + on queue: any DataTransferDispatchQueue, + completion: @escaping CompletionHandler + ) -> NetworkCancellable? where T == E.Response { + networkService.request(endPoint: endpoint) { result in + switch result { + case .success(let data): + let result: Result = self.decode( + data: data, + decoder: endpoint.responseDecoder + ) + + queue.asyncExecute { + completion(result) + } + + case .failure(let error): + self.errorLogger.log(error: error) + + let error = self.resolve(networkError: error) + + queue.asyncExecute { + completion(.failure(error)) + } + } + } + } + + func request( + with endpoint: E, + completion: @escaping CompletionHandler + ) -> NetworkCancellable? where T == E.Response { + request( + with: endpoint, + on: DispatchQueue.main, + completion: completion + ) + } + + func request( + with endpoint: E, + on queue: any DataTransferDispatchQueue, + completion: @escaping CompletionHandler + ) -> NetworkCancellable? where E.Response == Void { + networkService.request(endPoint: endpoint) { result in + switch result { + case .success: + queue.asyncExecute { + completion(.success(())) + } + case .failure(let error): + self.errorLogger.log(error: error) + let error = self.resolve(networkError: error) + + queue.asyncExecute { + completion(.failure(error)) + } + } + } + } + + func request( + with endpoint: E, + completion: @escaping CompletionHandler + ) -> NetworkCancellable? where E.Response == Void { + request(with: endpoint, on: DispatchQueue.main, completion: completion) + } + + private func decode( + data: Data?, + decoder: ResponseDecoder + ) -> Result { + do { + guard let data = data else { return .failure(.noResponse) } + + let result: T = try decoder.decode(data) + + return .success(result) + } catch { + self.errorLogger.log(error: error) + + return .failure(.parsing(error)) + } + } + + private func resolve( + networkError error: NetworkError + ) -> DataTransferError { + let resolvedError = self.errorResolver.resolve(error: error) + + return resolvedError is NetworkError ? + .networkFailure(error) : .resolveNetworkFailure(resolvedError) + } +} + +final class DataTransferErrorResolver: DataTransferErrorResolverProtocol { + func resolve(error: NetworkError) -> any Error { + return error + } +} From 08bed71cbb86f6d09409465956d0c2e68f3b2014 Mon Sep 17 00:00:00 2001 From: jeonseonghun Date: Fri, 10 May 2024 00:43:26 +0900 Subject: [PATCH 05/37] =?UTF-8?q?[Feat]:=20DIContainer=20/=20Coordinator?= =?UTF-8?q?=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 166 +++++++++++++++++- ...VIRO-PrivacyReport 2024-04-13 14-28-13.pdf | Bin 33022 -> 0 bytes AVIRO/App/DIContainer.swift | 32 ++++ AVIRO/Common/printIfDebug.swift | 12 ++ .../DataTransferErrorLogger.swift | 6 - .../NetworkService/NetworkErrorLogger.swift | 6 - .../Response_Request/BodyEncoder.swift | 4 +- AVIRO/Presentation/Base/AVIROViewModel.swift | 19 ++ .../Utils/Protocols/Alertable.swift | 61 +++++++ .../Utils/Protocols/BaseCoordinator.swift | 21 +++ .../Utils/Protocols/Coordinator.swift | 43 +++++ .../AccentColor.colorset/Contents.json | 0 .../AppIcon.appiconset/1024.png | Bin .../AppIcon.appiconset/114.png | Bin .../AppIcon.appiconset/120.png | Bin .../AppIcon.appiconset/180.png | Bin .../Assets.xcassets/AppIcon.appiconset/29.png | Bin .../Assets.xcassets/AppIcon.appiconset/40.png | Bin .../Assets.xcassets/AppIcon.appiconset/57.png | Bin .../Assets.xcassets/AppIcon.appiconset/58.png | Bin .../Assets.xcassets/AppIcon.appiconset/60.png | Bin .../Assets.xcassets/AppIcon.appiconset/80.png | Bin .../Assets.xcassets/AppIcon.appiconset/87.png | Bin .../AppIcon.appiconset/Contents.json | 0 .../2.0Background Colors/Contents.json | 0 .../GRAY0.colorset/Contents.json | 0 .../GRAY1.colorset/Contents.json | 0 .../GRAY2.colorset/Contents.json | 0 .../GRAY3.colorset/Contents.json | 0 .../GRAY4.colorset/Contents.json | 0 .../GRAY5.colorset/Contents.json | 0 .../GRAY6.colorset/Contents.json | 0 .../GRAY7.colorset/Contents.json | 0 .../BG NAVY.colorset/Contents.json | 0 .../BG RED.colorset/Contents.json | 0 .../COBALT.colorset/Contents.json | 0 .../ColorSet/2.0Main Colors/Contents.json | 0 .../GREEN.colorset/Contents.json | 0 .../KEYWORD_BLUE.colorset/Contents.json | 0 .../ORANGE.colorset/Contents.json | 0 .../2.0Main Colors/RED.colorset/Contents.json | 0 .../YELLOW.colorset/Contents.json | 0 .../Contents.json | 0 .../Assets.xcassets/ColorSet/Contents.json | 0 .../Assets.xcassets/Contents.json | 0 .../AllApproveCondition.png | Bin .../AllApproveCondition@2x.png | Bin .../AllApproveCondition@3x.png | Bin .../Contents.json | 0 .../Assets/AppleLogo.imageset/AppleLogo.png | Bin .../AppleLogo.imageset/AppleLogo@2x.png | Bin .../AppleLogo.imageset/AppleLogo@3x.png | Bin .../Assets/AppleLogo.imageset/Contents.json | 0 .../ApproveCondition.png | Bin .../ApproveCondition@2x.png | Bin .../ApproveCondition@3x.png | Bin .../ApproveCondition.imageset/Contents.json | 0 .../ImageSet/Assets/Back.imageset/Back.png | Bin .../ImageSet/Assets/Back.imageset/Back@2x.png | Bin .../ImageSet/Assets/Back.imageset/Back@3x.png | Bin .../Assets/Back.imageset/Contents.json | 0 .../Assets/CheckArt.imageset/Contents.json | 0 .../bxs-check-circle.svg.png | Bin .../bxs-check-circle.svg@2x.png | Bin .../bxs-check-circle.svg@3x.png | Bin .../ImageSet/Assets/Close.imageset/Close.png | Bin .../Assets/Close.imageset/Close@2x.png | Bin .../Assets/Close.imageset/Close@3x.png | Bin .../Assets/Close.imageset/Contents.json | 0 .../ImageSet/Assets/Contents.json | 0 .../Assets/Dots.imageset/Contents.json | 0 .../ImageSet/Assets/Dots.imageset/Dots.png | Bin .../ImageSet/Assets/Dots.imageset/Dots@2x.png | Bin .../ImageSet/Assets/Dots.imageset/Dots@3x.png | Bin .../Assets/DownBack.imageset/Contents.json | 0 .../Assets/DownBack.imageset/DownBack.png | Bin .../Assets/DownBack.imageset/DownBack@2x.png | Bin .../Assets/DownBack.imageset/DownBack@3x.png | Bin .../Assets/DownSorting.imageset/Contents.json | 0 .../DownSorting.imageset/DownSorting.png | Bin .../DownSorting.imageset/DownSorting@2x.png | Bin .../DownSorting.imageset/DownSorting@3x.png | Bin .../Assets/Edit.imageset/Contents.json | 0 .../ImageSet/Assets/Edit.imageset/Edit.png | Bin .../ImageSet/Assets/Edit.imageset/Edit@2x.png | Bin .../ImageSet/Assets/Edit.imageset/Edit@3x.png | Bin .../Assets/EmptyFrame.imageset/Contents.json | 0 .../Assets/EmptyFrame.imageset/EmptyFrame.png | Bin .../EmptyFrame.imageset/EmptyFrame@2x.png | Bin .../EmptyFrame.imageset/EmptyFrame@3x.png | Bin .../Assets/ErrorArt.imageset/Contents.json | 0 .../ErrorArt.imageset/bxs-error-alt.svg.png | Bin .../bxs-error-alt.svg@2x.png | Bin .../bxs-error-alt.svg@3x.png | Bin .../Assets/Flag.imageset/Contents.json | 0 .../ImageSet/Assets/Flag.imageset/Flag.png | Bin .../ImageSet/Assets/Flag.imageset/Flag@2x.png | Bin .../ImageSet/Assets/Flag.imageset/Flag@3x.png | Bin .../Assets/Frame.imageset/Contents.json | 0 .../ImageSet/Assets/Frame.imageset/Frame.png | Bin .../Assets/Frame.imageset/Frame@2x.png | Bin .../Assets/Frame.imageset/Frame@3x.png | Bin .../Assets/HomeInfo.imageset/Contents.json | 0 .../Assets/HomeInfo.imageset/HomeInfo.png | Bin .../Assets/HomeInfo.imageset/HomeInfo@2x.png | Bin .../Assets/HomeInfo.imageset/HomeInfo@3x.png | Bin .../Assets/InfoCircle.imageset/Contents.json | 0 .../Assets/InfoCircle.imageset/InfoCircle.png | Bin .../InfoCircle.imageset/InfoCircle@2x.png | Bin .../InfoCircle.imageset/InfoCircle@3x.png | Bin .../MainSearchStation.imageset/Contents.json | 0 .../MainSearchStation.png | Bin .../MainSearchStation@2x.png | Bin .../MainSearchStation@3x.png | Bin .../MainSearchStore.imageset/Contents.json | 0 .../MainSearchStore.png | Bin .../MainSearchStore@2x.png | Bin .../MainSearchStore@3x.png | Bin .../Assets/MapInfo.imageset/Contents.json | 0 .../Assets/MapInfo.imageset/MapInfo.png | Bin .../Assets/MapInfo.imageset/MapInfo@2x.png | Bin .../Assets/MapInfo.imageset/MapInfo@3x.png | Bin .../Assets/Minus.imageset/Contents.json | 0 .../ImageSet/Assets/Minus.imageset/Minus.png | Bin .../Assets/Minus.imageset/Minus@2x.png | Bin .../Assets/Minus.imageset/Minus@3x.png | Bin .../Assets/More.imageset/Contents.json | 0 .../ImageSet/Assets/More.imageset/More.png | Bin .../ImageSet/Assets/More.imageset/More@2x.png | Bin .../ImageSet/Assets/More.imageset/More@3x.png | Bin .../Assets/Pencil.imageset/Contents.json | 0 .../Assets/Pencil.imageset/Pencil.png | Bin .../Assets/Pencil.imageset/Pencil@2x.png | Bin .../Assets/Pencil.imageset/Pencil@3x.png | Bin .../Assets/PhoneInfo.imageset/Contents.json | 0 .../Assets/PhoneInfo.imageset/PhoneInfo.png | Bin .../PhoneInfo.imageset/PhoneInfo@2x.png | Bin .../PhoneInfo.imageset/PhoneInfo@3x.png | Bin .../Assets/PlaceReview.imageset/Contents.json | 0 .../PlaceReview.imageset/PlaceComment.png | Bin .../PlaceReview.imageset/PlaceComment@2x.png | Bin .../PlaceReview.imageset/PlaceComment@3x.png | Bin .../PlaceViewMap.imageset/Contents.json | 0 .../PlaceViewMap.imageset/PlaceViewMap.png | Bin .../PlaceViewMap.imageset/PlaceViewMap@2x.png | Bin .../PlaceViewMap.imageset/PlaceViewMap@3x.png | Bin .../Assets/Plus.imageset/Contents.json | 0 .../ImageSet/Assets/Plus.imageset/Plus.png | Bin .../ImageSet/Assets/Plus.imageset/Plus@2x.png | Bin .../ImageSet/Assets/Plus.imageset/Plus@3x.png | Bin .../Point_explain.imageset/Contents.json | 0 .../Point_explain.imageset/Point_explain.png | Bin .../Point_explain@2x.png | Bin .../Point_explain@3x.png | Bin .../Assets/PushView.imageset/Contents.json | 0 .../Assets/PushView.imageset/PushView.png | Bin .../Assets/PushView.imageset/PushView@2x.png | Bin .../Assets/PushView.imageset/PushView@3x.png | Bin .../Assets/RadioCircle.imageset/Contents.json | 0 .../RadioCircle.imageset/RadioCircle.png | Bin .../RadioCircle.imageset/RadioCircle@2x.png | Bin .../RadioCircle.imageset/RadioCircle@3x.png | Bin .../RadioCircleClicked.imageset/Contents.json | 0 .../RadioCircleClicked.png | Bin .../RadioCircleClicked@2x.png | Bin .../RadioCircleClicked@3x.png | Bin .../RecentlyTime.imageset/Contents.json | 0 .../RecentlyTime.imageset/RecentlyTime.png | Bin .../RecentlyTime.imageset/RecentlyTime@2x.png | Bin .../RecentlyTime.imageset/RecentlyTime@3x.png | Bin .../RequestCheck.imageset/Contents.json | 0 .../RequestCheck.imageset/RequestCheck.png | Bin .../RequestCheck.imageset/RequestCheck@2x.png | Bin .../RequestCheck.imageset/RequestCheck@3x.png | Bin .../Assets/Search.imageset/Contents.json | 0 .../Assets/Search.imageset/Search.png | Bin .../Assets/Search.imageset/Search@2x.png | Bin .../Assets/Search.imageset/Search@3x.png | Bin .../SmallPushView.imageset/Contents.json | 0 .../SmallPushView.imageset/SmallPushView.png | Bin .../SmallPushView@2x.png | Bin .../SmallPushView@3x.png | Bin .../Assets/TimeInfo.imageset/Contents.json | 0 .../Assets/TimeInfo.imageset/TimeInfo.png | Bin .../Assets/TimeInfo.imageset/TimeInfo@2x.png | Bin .../Assets/TimeInfo.imageset/TimeInfo@3x.png | Bin .../Assets/X-Circle.imageset/Contents.json | 0 .../Assets/X-Circle.imageset/X-Circle.png | Bin .../Assets/X-Circle.imageset/X-Circle@2x.png | Bin .../Assets/X-Circle.imageset/X-Circle@3x.png | Bin .../Assets/X-Circle26.imageset/Contents.json | 0 .../Assets/X-Circle26.imageset/close26.png | Bin .../Assets/X-Circle26.imageset/close26@2x.png | Bin .../Assets/X-Circle26.imageset/close26@3x.png | Bin .../current-location.imageset/Contents.json | 0 .../current-location.png | Bin .../current-location@2x.png | Bin .../current-location@3x.png | Bin .../Contents.json | 0 .../current-locationDisable.png | Bin .../current-locationDisable@2x.png | Bin .../current-locationDisable@3x.png | Bin .../selectedStar.imageset/Contents.json | 0 .../selectedStar.imageset/selectedStar.png | Bin .../selectedStar.imageset/selectedStar@2x.png | Bin .../selectedStar.imageset/selectedStar@3x.png | Bin .../Assets/share.imageset/Contents.json | 0 .../ImageSet/Assets/share.imageset/share.png | Bin .../Assets/share.imageset/share@2x.png | Bin .../Assets/share.imageset/share@3x.png | Bin .../Assets/star.imageset/Contents.json | 0 .../ImageSet/Assets/star.imageset/star.png | Bin .../ImageSet/Assets/star.imageset/star@2x.png | Bin .../ImageSet/Assets/star.imageset/star@3x.png | Bin .../Assets/starDisable.imageset/Contents.json | 0 .../starDisable.imageset/starDisable.png | Bin .../starDisable.imageset/starDisable@2x.png | Bin .../starDisable.imageset/starDisable@3x.png | Bin .../Assets/user2.imageset/Contents.json | 0 .../ImageSet/Assets/user2.imageset/user2.png | Bin .../Assets/user2.imageset/user2@2x.png | Bin .../Assets/user2.imageset/user2@3x.png | Bin .../ChallengeInfoGreen.png | Bin .../ChallengeInfoGreen@2x.png | Bin .../ChallengeInfoGreen@3x.png | Bin .../ChallengeInfoGreen.imageset/Contents.json | 0 .../ChallengeInfoOrange.png | Bin .../ChallengeInfoOrange@2x.png | Bin .../ChallengeInfoOrange@3x.png | Bin .../Contents.json | 0 .../ChallengeInfoYellow.png | Bin .../ChallengeInfoYellow@2x.png | Bin .../ChallengeInfoYellow@3x.png | Bin .../Contents.json | 0 .../ImageSet/Challenge/Contents.json | 0 .../GoldRectangle.imageset/Contents.json | 0 .../GoldRectangle.imageset/GlodRectangle.png | Bin .../GlodRectangle@2x.png | Bin .../GlodRectangle@3x.png | Bin .../GoldTrophy.imageset/Contents.json | 0 .../GoldTrophy.imageset/GlodTrophy.png | Bin .../GoldTrophy.imageset/GlodTrophy@2x.png | Bin .../GoldTrophy.imageset/GlodTrophy@3x.png | Bin .../Assets.xcassets/ImageSet/Contents.json | 0 .../ImageSet/Icon/Contents.json | 0 .../Icon/IconBox/AllBox.imageset/Allbox.png | Bin .../IconBox/AllBox.imageset/Allbox@2x.png | Bin .../IconBox/AllBox.imageset/Allbox@3x.png | Bin .../IconBox/AllBox.imageset/Contents.json | 0 .../ImageSet/Icon/IconBox/Contents.json | 0 .../IconBox/RequestBox.imageset/Contents.json | 0 .../RequestBox.imageset/Requestbox.png | Bin .../RequestBox.imageset/Requestbox@2x.png | Bin .../RequestBox.imageset/Requestbox@3x.png | Bin .../IconBox/SomeBox.imageset/Contents.json | 0 .../Icon/IconBox/SomeBox.imageset/Somebox.png | Bin .../IconBox/SomeBox.imageset/Somebox@2x.png | Bin .../IconBox/SomeBox.imageset/Somebox@3x.png | Bin .../IconCell/AllCell.imageset/AllCell.png | Bin .../IconCell/AllCell.imageset/AllCell@2x.png | Bin .../IconCell/AllCell.imageset/AllCell@3x.png | Bin .../IconCell/AllCell.imageset/Contents.json | 0 .../ImageSet/Icon/IconCell/Contents.json | 0 .../ListCellIcon.imageset/Contents.json | 0 .../ListCellIcon.imageset/ListCellIcon.png | Bin .../ListCellIcon.imageset/ListCellIcon@2x.png | Bin .../ListCellIcon.imageset/ListCellIcon@3x.png | Bin .../RequestCell.imageset/Contents.json | 0 .../RequestCell.imageset/RequestCell.png | Bin .../RequestCell.imageset/RequestCell@2x.png | Bin .../RequestCell.imageset/RequestCell@3x.png | Bin .../IconCell/SomeCell.imageset/Contents.json | 0 .../IconCell/SomeCell.imageset/SomeCell.png | Bin .../SomeCell.imageset/SomeCell@2x.png | Bin .../SomeCell.imageset/SomeCell@3x.png | Bin .../IconMarker/AllMap.imageset/AllMap.png | Bin .../IconMarker/AllMap.imageset/AllMap@2x.png | Bin .../IconMarker/AllMap.imageset/AllMap@3x.png | Bin .../IconMarker/AllMap.imageset/Contents.json | 0 .../AllMapClicked.imageset/AllMapClicked.png | Bin .../AllMapClicked@2x.png | Bin .../AllMapClicked@3x.png | Bin .../AllMapClicked.imageset/Contents.json | 0 .../ImageSet/Icon/IconMarker/Contents.json | 0 .../RequestMap.imageset/Contents.json | 0 .../RequestMap.imageset/RequestMap.png | Bin .../RequestMap.imageset/RequestMap@2x.png | Bin .../RequestMap.imageset/RequestMap@3x.png | Bin .../RequestMapClicked.imageset/Contents.json | 0 .../RequestMapClicked.png | Bin .../RequestMapClicked@2x.png | Bin .../RequestMapClicked@3x.png | Bin .../IconMarker/SomeMap.imageset/Contents.json | 0 .../IconMarker/SomeMap.imageset/SomeMap.png | Bin .../SomeMap.imageset/SomeMap@2x.png | Bin .../SomeMap.imageset/SomeMap@3x.png | Bin .../SomeMapClicked.imageset/Contents.json | 0 .../SomeMapClicked.png | Bin .../SomeMapClicked@2x.png | Bin .../SomeMapClicked@3x.png | Bin .../AllOption.imageset/AllOption.png | Bin .../AllOption.imageset/AllOption@2x.png | Bin .../AllOption.imageset/AllOption@3x.png | Bin .../AllOption.imageset/Contents.json | 0 .../Icon/IconOptionButton/Contents.json | 0 .../RequestOption.imageset/Contents.json | 0 .../RequestOption.imageset/RequestOption.png | Bin .../RequestOption@2x.png | Bin .../RequestOption@3x.png | Bin .../SomeOption.imageset/Contents.json | 0 .../SomeOption.imageset/SomeOption.png | Bin .../SomeOption.imageset/SomeOption@2x.png | Bin .../SomeOption.imageset/SomeOption@3x.png | Bin .../AllMapStar.imageset/AllMapStar.png | Bin .../AllMapStar.imageset/AllMapStar@2x.png | Bin .../AllMapStar.imageset/AllMapStar@3x.png | Bin .../AllMapStar.imageset/Contents.json | 0 .../AllMapStarClicked.png | Bin .../AllMapStarClicked@2x.png | Bin .../AllMapStarClicked@3x.png | Bin .../AllMapStarClicked.imageset/Contents.json | 0 .../Icon/IconStarMarker/Contents.json | 0 .../RequestMapStar.imageset/Contents.json | 0 .../RequestMapStar.png | Bin .../RequestMapStar@2x.png | Bin .../RequestMapStar@3x.png | Bin .../Contents.json | 0 .../RequestMapStarClicked.png | Bin .../RequestMapStarClicked@2x.png | Bin .../RequestMapStarClicked@3x.png | Bin .../SomeMapStar.imageset/Contents.json | 0 .../SomeMapStar.imageset/SomeMapStar.png | Bin .../SomeMapStar.imageset/SomeMapStar@2x.png | Bin .../SomeMapStar.imageset/SomeMapStar@3x.png | Bin .../SomeMapStarClicked.imageset/Contents.json | 0 .../SomeMapStarClicked.png | Bin .../SomeMapStarClicked@2x.png | Bin .../SomeMapStarClicked@3x.png | Bin .../All_Box_Bar.imageset/All_Box_Bar.png | Bin .../All_Box_Bar.imageset/All_Box_Bar@2x.png | Bin .../All_Box_Bar.imageset/All_Box_Bar@3x.png | Bin .../All_Box_Bar.imageset/Contents.json | 0 .../All_Box_Bread.imageset/All_Box_Bread.png | Bin .../All_Box_Bread@2x.png | Bin .../All_Box_Bread@3x.png | Bin .../All_Box_Bread.imageset/Contents.json | 0 .../All_Box_Coffee.png | Bin .../All_Box_Coffee@2x.png | Bin .../All_Box_Coffee@3x.png | Bin .../All_Box_Coffee.imageset/Contents.json | 0 .../All_Box_Restaurant.png | Bin .../All_Box_Restaurant@2x.png | Bin .../All_Box_Restaurant@3x.png | Bin .../All_Box_Restaurant.imageset/Contents.json | 0 .../All_Clicked_Bar.png | Bin .../All_Clicked_Bar@2x.png | Bin .../All_Clicked_Bar@3x.png | Bin .../All_Clicked_Bar.imageset/Contents.json | 0 .../All_Clicked_Bread.png | Bin .../All_Clicked_Bread@2x.png | Bin .../All_Clicked_Bread@3x.png | Bin .../All_Clicked_Bread.imageset/Contents.json | 0 .../All_Clicked_Coffee.png | Bin .../All_Clicked_Coffee@2x.png | Bin .../All_Clicked_Coffee@3x.png | Bin .../All_Clicked_Coffee.imageset/Contents.json | 0 .../All_Clicked_Restaurant.png | Bin .../All_Clicked_Restaurant@2x.png | Bin .../All_Clicked_Restaurant@3x.png | Bin .../Contents.json | 0 .../All_Default_Bar.png | Bin .../All_Default_Bar@2x.png | Bin .../All_Default_Bar@3x.png | Bin .../All_Default_Bar.imageset/Contents.json | 0 .../All_Default_Bread.png | Bin .../All_Default_Bread@2x.png | Bin .../All_Default_Bread@3x.png | Bin .../All_Default_Bread.imageset/Contents.json | 0 .../All_Default_Coffee.png | Bin .../All_Default_Coffee@2x.png | Bin .../All_Default_Coffee@3x.png | Bin .../All_Default_Coffee.imageset/Contents.json | 0 .../All_Default_Restaurant.png | Bin .../All_Default_Restaurant@2x.png | Bin .../All_Default_Restaurant@3x.png | Bin .../Contents.json | 0 .../Icon_2.0/Btn_home.imageset/Btn_home.png | Bin .../Btn_home.imageset/Btn_home@2x.png | Bin .../Btn_home.imageset/Btn_home@3x.png | Bin .../Icon_2.0/Btn_home.imageset/Contents.json | 0 .../Btn_pencil.imageset/Btn_pencil.png | Bin .../Btn_pencil.imageset/Btn_pencil@2x.png | Bin .../Btn_pencil.imageset/Btn_pencil@3x.png | Bin .../Btn_pencil.imageset/Contents.json | 0 .../Btn_plus_square.png | Bin .../Btn_plus_square@2x.png | Bin .../Btn_plus_square@3x.png | Bin .../Btn_plus_square.imageset/Contents.json | 0 .../Cancel_btn.imageset/Cancel_btn.png | Bin .../Cancel_btn.imageset/Cancel_btn@2x.png | Bin .../Cancel_btn.imageset/Cancel_btn@3x.png | Bin .../Cancel_btn.imageset/Contents.json | 0 .../Challenge_Info_Green.png | Bin .../Challenge_Info_Green@2x.png | Bin .../Challenge_Info_Green@3x.png | Bin .../Contents.json | 0 .../Challenge_Info_Orange.png | Bin .../Challenge_Info_Orange@2x.png | Bin .../Challenge_Info_Orange@3x.png | Bin .../Contents.json | 0 .../Challenge_Info_Yellow.png | Bin .../Challenge_Info_Yellow@2x.png | Bin .../Challenge_Info_Yellow@3x.png | Bin .../Contents.json | 0 .../ImageSet/Icon_2.0/Contents.json | 0 .../Default_btn_Bar.imageset/Contents.json | 0 .../Default_btn_Bar.png | Bin .../Default_btn_Bar@2x.png | Bin .../Default_btn_Bar@3x.png | Bin .../Default_btn_Bread.imageset/Contents.json | 0 .../Default_btn_Bread.png | Bin .../Default_btn_Bread@2x.png | Bin .../Default_btn_Bread@3x.png | Bin .../Default_btn_Coffee.imageset/Contents.json | 0 .../Default_btn_Coffee.png | Bin .../Default_btn_Coffee@2x.png | Bin .../Default_btn_Coffee@3x.png | Bin .../Contents.json | 0 .../Default_btn_Restaurant.png | Bin .../Default_btn_Restaurant@2x.png | Bin .../Default_btn_Restaurant@3x.png | Bin .../On_btn_Bar.imageset/Contents.json | 0 .../On_btn_Bar.imageset/On_btn_Bar.png | Bin .../On_btn_Bar.imageset/On_btn_Bar@2x.png | Bin .../On_btn_Bar.imageset/On_btn_Bar@3x.png | Bin .../On_btn_Bread.imageset/Contents.json | 0 .../On_btn_Bread.imageset/On_btn_Bread.png | Bin .../On_btn_Bread.imageset/On_btn_Bread@2x.png | Bin .../On_btn_Bread.imageset/On_btn_Bread@3x.png | Bin .../On_btn_Coffee.imageset/Contents.json | 0 .../On_btn_Coffee.imageset/On_btn_Coffee.png | Bin .../On_btn_Coffee@2x.png | Bin .../On_btn_Coffee@3x.png | Bin .../On_btn_Restaurant.imageset/Contents.json | 0 .../On_btn_Restaurant.png | Bin .../On_btn_Restaurant@2x.png | Bin .../On_btn_Restaurant@3x.png | Bin .../Request_Box_Bar.imageset/Contents.json | 0 .../Request_Box_Bar.png | Bin .../Request_Box_Bar@2x.png | Bin .../Request_Box_Bar@3x.png | Bin .../Request_Box_Bread.imageset/Contents.json | 0 .../Request_Box_Bread.png | Bin .../Request_Box_Bread@2x.png | Bin .../Request_Box_Bread@3x.png | Bin .../Request_Box_Coffee.imageset/Contents.json | 0 .../Request_Box_Coffee.png | Bin .../Request_Box_Coffee@2x.png | Bin .../Request_Box_Coffee@3x.png | Bin .../Contents.json | 0 .../Request_Box_Restaurant.png | Bin .../Request_Box_Restaurant@2x.png | Bin .../Request_Box_Restaurant@3x.png | Bin .../Contents.json | 0 .../Request_Clicked_Bar.png | Bin .../Request_Clicked_Bar@2x.png | Bin .../Request_Clicked_Bar@3x.png | Bin .../Contents.json | 0 .../Request_Clicked_Bread.png | Bin .../Request_Clicked_Bread@2x.png | Bin .../Request_Clicked_Bread@3x.png | Bin .../Contents.json | 0 .../Request_Clicked_Coffee.png | Bin .../Request_Clicked_Coffee@2x.png | Bin .../Request_Clicked_Coffee@3x.png | Bin .../Contents.json | 0 .../Request_Clicked_Restaurant.png | Bin .../Request_Clicked_Restaurant@2x.png | Bin .../Request_Clicked_Restaurant@3x.png | Bin .../Contents.json | 0 .../Request_Default_Bar.png | Bin .../Request_Default_Bar@2x.png | Bin .../Request_Default_Bar@3x.png | Bin .../Contents.json | 0 .../Request_Default_Bread.png | Bin .../Request_Default_Bread@2x.png | Bin .../Request_Default_Bread@3x.png | Bin .../Contents.json | 0 .../Request_Default_Coffee.png | Bin .../Request_Default_Coffee@2x.png | Bin .../Request_Default_Coffee@3x.png | Bin .../Contents.json | 0 .../Request_Default_Restaurant.png | Bin .../Request_Default_Restaurant@2x.png | Bin .../Request_Default_Restaurant@3x.png | Bin .../Some_Box_Bar.imageset/Contents.json | 0 .../Some_Box_Bar.imageset/Some_Box_Bar.png | Bin .../Some_Box_Bar.imageset/Some_Box_Bar@2x.png | Bin .../Some_Box_Bar.imageset/Some_Box_Bar@3x.png | Bin .../Some_Box_Bread.imageset/Contents.json | 0 .../Some_Box_Bread.png | Bin .../Some_Box_Bread@2x.png | Bin .../Some_Box_Bread@3x.png | Bin .../Some_Box_Coffee.imageset/Contents.json | 0 .../Some_Box_Coffee.png | Bin .../Some_Box_Coffee@2x.png | Bin .../Some_Box_Coffee@3x.png | Bin .../Contents.json | 0 .../Some_Box_Restaurant.png | Bin .../Some_Box_Restaurant@2x.png | Bin .../Some_Box_Restaurant@3x.png | Bin .../Some_Clicked_Bar.imageset/Contents.json | 0 .../Some_Clicked_Bar.png | Bin .../Some_Clicked_Bar@2x.png | Bin .../Some_Clicked_Bar@3x.png | Bin .../Some_Clicked_Bread.imageset/Contents.json | 0 .../Some_Clicked_Bread.png | Bin .../Some_Clicked_Bread@2x.png | Bin .../Some_Clicked_Bread@3x.png | Bin .../Contents.json | 0 .../Some_Clicked_Coffee.png | Bin .../Some_Clicked_Coffee@2x.png | Bin .../Some_Clicked_Coffee@3x.png | Bin .../Contents.json | 0 .../Some_Clicked_Restaurant.png | Bin .../Some_Clicked_Restaurant@2x.png | Bin .../Some_Clicked_Restaurant@3x.png | Bin .../Some_Default_Bar.imageset/Contents.json | 0 .../Some_Default_Bar.png | Bin .../Some_Default_Bar@2x.png | Bin .../Some_Default_Bar@3x.png | Bin .../Some_Default_Bread.imageset/Contents.json | 0 .../Some_Default_Bread.png | Bin .../Some_Default_Bread@2x.png | Bin .../Some_Default_Bread@3x.png | Bin .../Contents.json | 0 .../Some_Default_Coffee.png | Bin .../Some_Default_Coffee@2x.png | Bin .../Some_Default_Coffee@3x.png | Bin .../Contents.json | 0 .../Some_Default_Restaurant.png | Bin .../Some_Default_Restaurant@2x.png | Bin .../Some_Default_Restaurant@3x.png | Bin .../ImageSet/LaunchScreen/Contents.json | 0 .../LaunchTitle.imageset/Contents.json | 0 .../LaunchTitle.imageset/LaunchTitle.png | Bin .../LaunchTitle.imageset/LaunchTitle@2x.png | Bin .../LaunchTitle.imageset/LaunchTitle@3x.png | Bin .../Launchbg.imageset/Contents.json | 0 .../LaunchScreen/Launchbg.imageset/bg.png | Bin .../LaunchScreen/Launchbg.imageset/bg@2x.png | Bin .../LaunchScreen/Launchbg.imageset/bg@3x.png | Bin .../LaunchScreen/aviro.imageset/Contents.json | 0 .../LaunchScreen/aviro.imageset/aviro.png | Bin .../LaunchScreen/aviro.imageset/aviro@2x.png | Bin .../LaunchScreen/aviro.imageset/aviro@3x.png | Bin .../ImageSet/Main/Contents.json | 0 .../EnrollCharacter.imageset/Contents.json | 0 .../EnrollCharacter.png | Bin .../EnrollCharacter@2x.png | Bin .../EnrollCharacter@3x.png | Bin .../LoginCharacter.imageset/Contents.json | 0 .../LoginCharacter.png | Bin .../LoginCharacter@2x.png | Bin .../LoginCharacter@3x.png | Bin .../Main/MyIcon1.imageset/Contents.json | 0 .../Main/MyIcon1.imageset/MyIcon1.png | Bin .../Main/MyIcon1.imageset/MyIcon1@2x.png | Bin .../Main/MyIcon1.imageset/MyIcon1@3x.png | Bin .../Main/MyIcon2.imageset/Contents.json | 0 .../Main/MyIcon2.imageset/MyIcon2.png | Bin .../Main/MyIcon2.imageset/MyIcon2@2x.png | Bin .../Main/MyIcon2.imageset/MyIcon2@3x.png | Bin .../Main/MyIcon3.imageset/Contents.json | 0 .../Main/MyIcon3.imageset/MyIcon3.png | Bin .../Main/MyIcon3.imageset/MyIcon3@2x.png | Bin .../Main/MyIcon3.imageset/MyIcon3@3x.png | Bin .../Main/MyIcon4.imageset/Contents.json | 0 .../Main/MyIcon4.imageset/MyIcon4.png | Bin .../Main/MyIcon4.imageset/MyIcon4@2x.png | Bin .../Main/MyIcon4.imageset/MyIcon4@3x.png | Bin .../Main/MyIcon5.imageset/Contents.json | 0 .../Main/MyIcon5.imageset/MyIcon5.png | Bin .../Main/MyIcon5.imageset/MyIcon5@2x.png | Bin .../Main/MyIcon5.imageset/MyIcon5@3x.png | Bin .../NoResultCharacter.imageset/Contents.json | 0 .../NoResultCharacter.png | Bin .../NoResultCharacter@2x.png | Bin .../NoResultCharacter@3x.png | Bin .../Screen/Contents 1.imageset/Contents 1.png | Bin .../Contents 1.imageset/Contents 1@2x.png | Bin .../Contents 1.imageset/Contents 1@3x.png | Bin .../Screen/Contents 1.imageset/Contents.json | 0 .../Screen/Contents 2.imageset/Contents 2.png | Bin .../Contents 2.imageset/Contents 2@2x.png | Bin .../Contents 2.imageset/Contents 2@3x.png | Bin .../Screen/Contents 2.imageset/Contents.json | 0 .../Screen/Contents 3.imageset/Contents 3.png | Bin .../Contents 3.imageset/Contents 3@2x.png | Bin .../Contents 3.imageset/Contents 3@3x.png | Bin .../Screen/Contents 3.imageset/Contents.json | 0 .../Screen/Contents 4.imageset/Contents 4.png | Bin .../Contents 4.imageset/Contents 4@2x.png | Bin .../Contents 4.imageset/Contents 4@3x.png | Bin .../Screen/Contents 4.imageset/Contents.json | 0 .../ImageSet/Screen/Contents.json | 0 .../ImageSet/TabBarIcon/Contents.json | 0 .../TabBarIcon/HomeTab.imageset/Contents.json | 0 .../HomeTab.imageset/bxs-home-alt-2.svg.png | Bin .../bxs-home-alt-2.svg@2x.png | Bin .../bxs-home-alt-2.svg@3x.png | Bin .../TabBarIcon/PlusTab.imageset/Contents.json | 0 .../PlusTab.imageset/bxs-plus-square.svg.png | Bin .../bxs-plus-square.svg@2x.png | Bin .../bxs-plus-square.svg@3x.png | Bin .../TrophyTab.imageset/Contents.json | 0 .../TabBarIcon/TrophyTab.imageset/Trophy.png | Bin .../TrophyTab.imageset/Trophy@2x.png | Bin .../TrophyTab.imageset/Trophy@3x.png | Bin .../Assets.xcassets/ImageSet/Wrapper.png | Bin .../Fonts/Pretendard-Black.otf | Bin .../Fonts/Pretendard-Bold.otf | Bin .../Fonts/Pretendard-ExtraBold.otf | Bin .../Fonts/Pretendard-ExtraLight.otf | Bin .../Fonts/Pretendard-Light.otf | Bin .../Fonts/Pretendard-Medium.otf | Bin .../Fonts/Pretendard-Regular.otf | Bin .../Fonts/Pretendard-SemiBold.otf | Bin .../Fonts/Pretendard-Thin.otf | Bin AVIRO/{App => Resources}/Lottie/Berry2.json | 0 630 files changed, 353 insertions(+), 17 deletions(-) delete mode 100644 AVIRO/AVIRO-PrivacyReport 2024-04-13 14-28-13.pdf create mode 100644 AVIRO/App/DIContainer.swift create mode 100644 AVIRO/Common/printIfDebug.swift create mode 100644 AVIRO/Presentation/Base/AVIROViewModel.swift create mode 100644 AVIRO/Presentation/Utils/Protocols/Alertable.swift create mode 100644 AVIRO/Presentation/Utils/Protocols/BaseCoordinator.swift create mode 100644 AVIRO/Presentation/Utils/Protocols/Coordinator.swift rename AVIRO/{App => Resources}/Assets.xcassets/AccentColor.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/1024.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/114.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/120.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/180.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/29.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/40.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/57.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/58.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/60.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/80.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/87.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/AppIcon.appiconset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Background Colors/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Background Colors/GRAY0.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Background Colors/GRAY1.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Background Colors/GRAY2.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Background Colors/GRAY3.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Background Colors/GRAY4.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Background Colors/GRAY5.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Background Colors/GRAY6.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Background Colors/GRAY7.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Main Colors/BG NAVY.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Main Colors/BG RED.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Main Colors/COBALT.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Main Colors/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Main Colors/GREEN.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Main Colors/KEYWORD_BLUE.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Main Colors/ORANGE.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Main Colors/RED.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/2.0Main Colors/YELLOW.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/ChallengeImageBorder.colorset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ColorSet/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Back.imageset/Back.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Back.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Close.imageset/Close.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Close.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Dots.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/DownBack.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Edit.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Flag.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Frame.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Minus.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/More.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/More.imageset/More.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/More.imageset/More@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/More.imageset/More@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Plus.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PushView.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Search.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Search.imageset/Search.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/current-location.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/share.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/share.imageset/share.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/share.imageset/share@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/share.imageset/share@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/star.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/star.imageset/star.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/star.imageset/star@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/star.imageset/star@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/starDisable.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/user2.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/user2.imageset/user2.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Screen/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Wrapper.png (100%) rename AVIRO/{App => Resources}/Fonts/Pretendard-Black.otf (100%) rename AVIRO/{App => Resources}/Fonts/Pretendard-Bold.otf (100%) rename AVIRO/{App => Resources}/Fonts/Pretendard-ExtraBold.otf (100%) rename AVIRO/{App => Resources}/Fonts/Pretendard-ExtraLight.otf (100%) rename AVIRO/{App => Resources}/Fonts/Pretendard-Light.otf (100%) rename AVIRO/{App => Resources}/Fonts/Pretendard-Medium.otf (100%) rename AVIRO/{App => Resources}/Fonts/Pretendard-Regular.otf (100%) rename AVIRO/{App => Resources}/Fonts/Pretendard-SemiBold.otf (100%) rename AVIRO/{App => Resources}/Fonts/Pretendard-Thin.otf (100%) rename AVIRO/{App => Resources}/Lottie/Berry2.json (100%) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 0f36bbf9..7064fb9f 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -202,6 +202,12 @@ C5BA9DF42BECC902004FA06E /* NetworkErrorLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DF32BECC902004FA06E /* NetworkErrorLogger.swift */; }; C5BA9DF62BECCD58004FA06E /* DataTransferError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DF52BECCD58004FA06E /* DataTransferError.swift */; }; C5BA9DFB2BED136A004FA06E /* DataTransferErrorLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9DFA2BED136A004FA06E /* DataTransferErrorLogger.swift */; }; + C5BA9E0E2BED1D75004FA06E /* AVIROViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9E0D2BED1D75004FA06E /* AVIROViewModel.swift */; }; + C5BA9E102BED1E11004FA06E /* Alertable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9E0F2BED1E11004FA06E /* Alertable.swift */; }; + C5BA9E122BED223C004FA06E /* Coordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9E112BED223C004FA06E /* Coordinator.swift */; }; + C5BA9E142BED2244004FA06E /* BaseCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9E132BED2244004FA06E /* BaseCoordinator.swift */; }; + C5BA9E172BED2585004FA06E /* printIfDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9E162BED2585004FA06E /* printIfDebug.swift */; }; + C5BA9E192BED25D2004FA06E /* DIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9E182BED25D2004FA06E /* DIContainer.swift */; }; C5C20BAC2AD504D500855BBB /* AmplitudeUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C20BAB2AD504D500855BBB /* AmplitudeUtility.swift */; }; C5C290742A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C290732A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift */; }; C5C290772A85E4FF00ED5DCE /* PlaceHomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C290762A85E4FF00ED5DCE /* PlaceHomeView.swift */; }; @@ -495,6 +501,12 @@ C5BA9DF32BECC902004FA06E /* NetworkErrorLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkErrorLogger.swift; sourceTree = ""; }; C5BA9DF52BECCD58004FA06E /* DataTransferError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTransferError.swift; sourceTree = ""; }; C5BA9DFA2BED136A004FA06E /* DataTransferErrorLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataTransferErrorLogger.swift; sourceTree = ""; }; + C5BA9E0D2BED1D75004FA06E /* AVIROViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AVIROViewModel.swift; sourceTree = ""; }; + C5BA9E0F2BED1E11004FA06E /* Alertable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alertable.swift; sourceTree = ""; }; + C5BA9E112BED223C004FA06E /* Coordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Coordinator.swift; sourceTree = ""; }; + C5BA9E132BED2244004FA06E /* BaseCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCoordinator.swift; sourceTree = ""; }; + C5BA9E162BED2585004FA06E /* printIfDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = printIfDebug.swift; sourceTree = ""; }; + C5BA9E182BED25D2004FA06E /* DIContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DIContainer.swift; sourceTree = ""; }; C5C20BAB2AD504D500855BBB /* AmplitudeUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmplitudeUtility.swift; sourceTree = ""; }; C5C290732A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceSegmentedControlView.swift; sourceTree = ""; }; C5C290762A85E4FF00ED5DCE /* PlaceHomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceHomeView.swift; sourceTree = ""; }; @@ -621,13 +633,11 @@ C50367EC2A1791620020C6BB /* App */ = { isa = PBXGroup; children = ( - C510002C2AB5F1E600F65C1F /* Fonts */, - C5E430AA2A5D13B600CB67EC /* Lottie */, C505EB172ACC5AC50057A4F8 /* LaunchScreenViewController.swift */, C52FA3422A175B20005E70DC /* AppDelegate.swift */, C52FA3442A175B20005E70DC /* SceneDelegate.swift */, C51132C02A559BCA006E1EC3 /* AppController.swift */, - C52FA34B2A175B20005E70DC /* Assets.xcassets */, + C5BA9E182BED25D2004FA06E /* DIContainer.swift */, C52FA34D2A175B20005E70DC /* LaunchScreen.storyboard */, C52FA3502A175B20005E70DC /* Info.plist */, 62166DED2BA2E92300F05D40 /* API.plist */, @@ -938,13 +948,18 @@ C52FA3412A175B20005E70DC /* AVIRO */ = { isa = PBXGroup; children = ( + C5BA9DFC2BED1C0D004FA06E /* Resources */, C593B64C2A4BFD9A00D224CE /* AVIRO.entitlements */, C50367EC2A1791620020C6BB /* App */, C50367F62A179D6E0020C6BB /* Custom */, C50367F32A1795BE0020C6BB /* Model */, C50367F22A1795B90020C6BB /* Manager */, C50367ED2A1791840020C6BB /* Scene */, + C5BA9DFE2BED1C64004FA06E /* Data */, + C5BA9DFF2BED1C8F004FA06E /* Domain */, + C5BA9E002BED1C9C004FA06E /* Presentation */, C5BA9DC62BE8AB22004FA06E /* Infrastructure */, + C5BA9E152BED256F004FA06E /* Common */, ); path = AVIRO; sourceTree = ""; @@ -1733,6 +1748,145 @@ path = DataTransfer; sourceTree = ""; }; + C5BA9DFC2BED1C0D004FA06E /* Resources */ = { + isa = PBXGroup; + children = ( + C52FA34B2A175B20005E70DC /* Assets.xcassets */, + C5E430AA2A5D13B600CB67EC /* Lottie */, + C510002C2AB5F1E600F65C1F /* Fonts */, + ); + path = Resources; + sourceTree = ""; + }; + C5BA9DFE2BED1C64004FA06E /* Data */ = { + isa = PBXGroup; + children = ( + C5BA9E012BED1CB1004FA06E /* Common */, + C5BA9E022BED1CB7004FA06E /* Network */, + C5BA9E032BED1CBF004FA06E /* PresistentStorages */, + C5BA9E042BED1CD2004FA06E /* Repositories */, + ); + path = Data; + sourceTree = ""; + }; + C5BA9DFF2BED1C8F004FA06E /* Domain */ = { + isa = PBXGroup; + children = ( + C5BA9E072BED1CF8004FA06E /* Entities */, + C5BA9E062BED1CF0004FA06E /* Interfaces */, + C5BA9E052BED1CE8004FA06E /* UseCases */, + ); + path = Domain; + sourceTree = ""; + }; + C5BA9E002BED1C9C004FA06E /* Presentation */ = { + isa = PBXGroup; + children = ( + C5BA9E0C2BED1D5D004FA06E /* Base */, + C5BA9E0B2BED1D58004FA06E /* Feature */, + C5BA9E082BED1D07004FA06E /* Utils */, + ); + path = Presentation; + sourceTree = ""; + }; + C5BA9E012BED1CB1004FA06E /* Common */ = { + isa = PBXGroup; + children = ( + ); + path = Common; + sourceTree = ""; + }; + C5BA9E022BED1CB7004FA06E /* Network */ = { + isa = PBXGroup; + children = ( + ); + path = Network; + sourceTree = ""; + }; + C5BA9E032BED1CBF004FA06E /* PresistentStorages */ = { + isa = PBXGroup; + children = ( + ); + path = PresistentStorages; + sourceTree = ""; + }; + C5BA9E042BED1CD2004FA06E /* Repositories */ = { + isa = PBXGroup; + children = ( + ); + path = Repositories; + sourceTree = ""; + }; + C5BA9E052BED1CE8004FA06E /* UseCases */ = { + isa = PBXGroup; + children = ( + ); + path = UseCases; + sourceTree = ""; + }; + C5BA9E062BED1CF0004FA06E /* Interfaces */ = { + isa = PBXGroup; + children = ( + ); + path = Interfaces; + sourceTree = ""; + }; + C5BA9E072BED1CF8004FA06E /* Entities */ = { + isa = PBXGroup; + children = ( + ); + path = Entities; + sourceTree = ""; + }; + C5BA9E082BED1D07004FA06E /* Utils */ = { + isa = PBXGroup; + children = ( + C5BA9E092BED1D27004FA06E /* Extensions */, + C5BA9E0A2BED1D2D004FA06E /* Protocols */, + ); + path = Utils; + sourceTree = ""; + }; + C5BA9E092BED1D27004FA06E /* Extensions */ = { + isa = PBXGroup; + children = ( + ); + path = Extensions; + sourceTree = ""; + }; + C5BA9E0A2BED1D2D004FA06E /* Protocols */ = { + isa = PBXGroup; + children = ( + C5BA9E0F2BED1E11004FA06E /* Alertable.swift */, + C5BA9E112BED223C004FA06E /* Coordinator.swift */, + C5BA9E132BED2244004FA06E /* BaseCoordinator.swift */, + ); + path = Protocols; + sourceTree = ""; + }; + C5BA9E0B2BED1D58004FA06E /* Feature */ = { + isa = PBXGroup; + children = ( + ); + path = Feature; + sourceTree = ""; + }; + C5BA9E0C2BED1D5D004FA06E /* Base */ = { + isa = PBXGroup; + children = ( + C5BA9E0D2BED1D75004FA06E /* AVIROViewModel.swift */, + ); + path = Base; + sourceTree = ""; + }; + C5BA9E152BED256F004FA06E /* Common */ = { + isa = PBXGroup; + children = ( + C5BA9E162BED2585004FA06E /* printIfDebug.swift */, + ); + path = Common; + sourceTree = ""; + }; C5C290752A85E4EF00ED5DCE /* SegmentedControlSubView */ = { isa = PBXGroup; children = ( @@ -2379,6 +2533,7 @@ C52066292A7CD5FC0038ECCD /* HistoryTableModel.swift in Sources */, C5FD92EB2A9C786600CF4673 /* PublicAPIRequestComponents.swift in Sources */, C58C49C82AC9B67600DE04B7 /* AppleUserLoginModel.swift in Sources */, + C5BA9E172BED2585004FA06E /* printIfDebug.swift in Sources */, C5503B592B9F51C60050643F /* WelcomeViewController.swift in Sources */, C54B591F2B9606C500C0B190 /* UITextView+Extension.swift in Sources */, C58FBF902AC2B83A00AB6EFC /* AVIROAPIManagerProtocol.swift in Sources */, @@ -2429,7 +2584,9 @@ C5FBDA5C2B398264007AC77E /* ChallengeInfoYellowView.swift in Sources */, C5DCBC8F2B91CF46003502BA /* AVIROMyBookmarkList+DTO.swift in Sources */, C5D93DA32A58718300629C39 /* NextPageButton.swift in Sources */, + C5BA9E0E2BED1D75004FA06E /* AVIROViewModel.swift in Sources */, C50DB7512A9B83550078B501 /* ChangeableAddressViewController.swift in Sources */, + C5BA9E142BED2244004FA06E /* BaseCoordinator.swift in Sources */, C5A989992A959E040021B7C3 /* AVIROBookmark+DTO.swift in Sources */, C54B591D2B95F61F00C0B190 /* MyCommentListTableViewCell.swift in Sources */, C5476B6E2B30760000F5FC6E /* ChallengeLevelView.swift in Sources */, @@ -2454,6 +2611,7 @@ C52066232A7CAC910038ECCD /* NoHistoryView.swift in Sources */, C5E306E72A6FB4ED00C11CF7 /* MenuField.swift in Sources */, C5ED46982AAEEFB600F2DA04 /* OperationHoursView.swift in Sources */, + C5BA9E102BED1E11004FA06E /* Alertable.swift in Sources */, C51AED212A8B2BDB0015FBC2 /* HomeMapReferButton.swift in Sources */, C5E430B32A5DADBE00CB67EC /* SecondRegistrationPresenter.swift in Sources */, C5EB510D2A20A4B400B29CC1 /* HomeSearchViewTableViewCell.swift in Sources */, @@ -2470,6 +2628,7 @@ C52FA3452A175B20005E70DC /* SceneDelegate.swift in Sources */, C5351B542A19A7B100116D50 /* UserCoordinate.swift in Sources */, C5EB50EA2A1C705900B29CC1 /* SettingViewController.swift in Sources */, + C5BA9E192BED25D2004FA06E /* DIContainer.swift in Sources */, C5D802702B3C6E4000136D0E /* RecommendPlaceAlertView.swift in Sources */, C510005A2AB998F600F65C1F /* UIImage+Extension.swift in Sources */, C5FBDA5E2B398270007AC77E /* ChallengeInfoGreenView.swift in Sources */, @@ -2579,6 +2738,7 @@ C5BA9DC92BE8AB8F004FA06E /* DataTransferService.swift in Sources */, C5A201BD2A98708800A54381 /* EditPlaceInfoPresenter.swift in Sources */, C59491D32AB0336100880B4B /* UIView(Animation)+Extension.swift in Sources */, + C5BA9E122BED223C004FA06E /* Coordinator.swift in Sources */, C5D3E15C2B9D88F200DBB346 /* AVIROTabBarInteractionDelegate.swift in Sources */, C51385502AAD921F001AB827 /* AVIROPlaceReportCheck+DTO.swift in Sources */, C51385472AAAF3BB001AB827 /* SettingCell.swift in Sources */, diff --git a/AVIRO/AVIRO-PrivacyReport 2024-04-13 14-28-13.pdf b/AVIRO/AVIRO-PrivacyReport 2024-04-13 14-28-13.pdf deleted file mode 100644 index b1550c9fe438a754cdc7cd4e911418b5f506e5e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33022 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 diff --git a/AVIRO/App/DIContainer.swift b/AVIRO/App/DIContainer.swift new file mode 100644 index 00000000..9ca4e45f --- /dev/null +++ b/AVIRO/App/DIContainer.swift @@ -0,0 +1,32 @@ +// +// DIContainer.swift +// AVIRO +// +// Created by 전성훈 on 5/10/24. +// + +import Foundation + +final class DIContainer { + private var dependencies: [String: AnyObject] = [:] + + private init() { } + + func register(_ type: T.Type, dependency: T) { + let key = String(describing: type) + + dependencies[key] = dependency + } + + func resolve(_ type: T.Type) -> T? { + let key = String(describing: type) + + guard let value = dependencies[key] as? T else { + printIfDebug("---- 의존성 key 값을 찾지 못했습니다 \(key) ----") + + return nil + } + + return value + } +} diff --git a/AVIRO/Common/printIfDebug.swift b/AVIRO/Common/printIfDebug.swift new file mode 100644 index 00000000..e06c3ae8 --- /dev/null +++ b/AVIRO/Common/printIfDebug.swift @@ -0,0 +1,12 @@ +// +// printIfDebug.swift +// AVIRO +// +// Created by 전성훈 on 5/10/24. +// + +func printIfDebug(_ string: String) { + #if DEBUG + print(string) + #endif +} diff --git a/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift index 4415e525..8c7156d3 100644 --- a/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift +++ b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferErrorLogger.swift @@ -17,9 +17,3 @@ final class DataTransferErrorLogger: DataTransferErrorLoggerProtocol { printIfDebug("\(error)") } } - -private func printIfDebug(_ string: String) { - #if DEBUG - print(string) - #endif -} diff --git a/AVIRO/Infrastructure/Network/NetworkService/NetworkErrorLogger.swift b/AVIRO/Infrastructure/Network/NetworkService/NetworkErrorLogger.swift index 3ec7551d..345f9338 100644 --- a/AVIRO/Infrastructure/Network/NetworkService/NetworkErrorLogger.swift +++ b/AVIRO/Infrastructure/Network/NetworkService/NetworkErrorLogger.swift @@ -50,9 +50,3 @@ final class NetworkErrorLogger: NetworkErrorLoggerProtocol { print("--------") } } - -private func printIfDebug(_ string: String) { - #if DEBUG - print(string) - #endif -} diff --git a/AVIRO/Infrastructure/Network/NetworkService/Response_Request/BodyEncoder.swift b/AVIRO/Infrastructure/Network/NetworkService/Response_Request/BodyEncoder.swift index 2ab33463..bbf653f6 100644 --- a/AVIRO/Infrastructure/Network/NetworkService/Response_Request/BodyEncoder.swift +++ b/AVIRO/Infrastructure/Network/NetworkService/Response_Request/BodyEncoder.swift @@ -12,13 +12,13 @@ protocol BodyEncoder { } struct JSONBodyEncoder: BodyEncoder { - func encode(_ parameters: [String : Any]) -> Data? { + func encode(_ parameters: [String: Any]) -> Data? { return try? JSONSerialization.data(withJSONObject: parameters) } } struct AsciiBodyEncoder: BodyEncoder { - func encode(_ parameters: [String : Any]) -> Data? { + func encode(_ parameters: [String: Any]) -> Data? { return parameters.queryString .data( using: String.Encoding.ascii, diff --git a/AVIRO/Presentation/Base/AVIROViewModel.swift b/AVIRO/Presentation/Base/AVIROViewModel.swift new file mode 100644 index 00000000..781e3ead --- /dev/null +++ b/AVIRO/Presentation/Base/AVIROViewModel.swift @@ -0,0 +1,19 @@ +// +// AVIROViewModel.swift +// AVIRO +// +// Created by 전성훈 on 5/10/24. +// + +import Foundation + +protocol CoordinatorActions: AnyObject { } + +protocol AVIROViewModel { + associatedtype CoordinatorActions + + associatedtype Input + associatedtype Output + + func transform(input: Input) -> Output +} diff --git a/AVIRO/Presentation/Utils/Protocols/Alertable.swift b/AVIRO/Presentation/Utils/Protocols/Alertable.swift new file mode 100644 index 00000000..f74f7c06 --- /dev/null +++ b/AVIRO/Presentation/Utils/Protocols/Alertable.swift @@ -0,0 +1,61 @@ +// +// Alertable.swift +// AVIRO +// +// Created by 전성훈 on 5/10/24. +// + +import UIKit + +protocol Alertable { } + +extension Alertable where Self: UIViewController { + typealias AlertAction = ( + title: String, + style: UIAlertAction.Style, + handler: (() -> Void)? + ) + + func showAlert( + title: String?, + message: String?, + preferredStyle: UIAlertController.Style = .alert, + actions: [AlertAction] = [("확인", .default, nil)] + ) { + let alertController = UIAlertController( + title: title, + message: message, + preferredStyle: preferredStyle + ) + + for action in actions { + let actionItem = UIAlertAction( + title: action.title, + style: action.style + ) { _ in + action.handler?() + } + + if action.style == .destructive { + actionItem.setValue(UIColor.warning, forKey: "alertDestructive") + } + + alertController.addAction(actionItem) + } + + present(alertController, animated: true) + } + + func showActionSheet( + title: String?, + message: String?, + actions: [AlertAction] + ) { + showAlert( + title: title, + message: message, + preferredStyle: .actionSheet, + actions: actions + ) + } +} diff --git a/AVIRO/Presentation/Utils/Protocols/BaseCoordinator.swift b/AVIRO/Presentation/Utils/Protocols/BaseCoordinator.swift new file mode 100644 index 00000000..a0d09e15 --- /dev/null +++ b/AVIRO/Presentation/Utils/Protocols/BaseCoordinator.swift @@ -0,0 +1,21 @@ +// +// BaseCoordinator.swift +// AVIRO +// +// Created by 전성훈 on 5/10/24. +// + +import UIKit + +class BaseCoordinator: Coordinator { + var childCoordinators: [Coordinator] = [] + var navigationController: UINavigationController? + var finishDelegate: CoordinatorFinishDelegate? + + init() { } + + func start(navigationController: UINavigationController) { + self.navigationController = navigationController + printIfDebug("---- start Coordinator: \(self) ----") + } +} diff --git a/AVIRO/Presentation/Utils/Protocols/Coordinator.swift b/AVIRO/Presentation/Utils/Protocols/Coordinator.swift new file mode 100644 index 00000000..8dabf586 --- /dev/null +++ b/AVIRO/Presentation/Utils/Protocols/Coordinator.swift @@ -0,0 +1,43 @@ +// +// Coordinator.swift +// AVIRO +// +// Created by 전성훈 on 5/10/24. +// + +import UIKit + +protocol CoordinatorFinishDelegate: AnyObject { + func coordinatorDidFinish(childCoordinator: Coordinator) +} + +protocol Coordinator: AnyObject { + var childCoordinators: [Coordinator] { get set } + var navigationController: UINavigationController? { get set } + var finishDelegate: CoordinatorFinishDelegate? { get set } + + func start(navigationController: UINavigationController) + + func addChildCoordinator(_ coordinator: Coordinator) + func removeChildCoordinator(_ coordinator: Coordinator) + func removeChildCoordinators() +} + +extension Coordinator { + func addChildCoordinator(_ coordinator: Coordinator) { + if !childCoordinators.contains(where: { $0 === coordinator }) { + childCoordinators.append(coordinator) + } + } + + func removeChildCoordinator(_ coordinator: Coordinator) { + if let index = childCoordinators.firstIndex(where: { $0 === coordinator }) { + childCoordinators.remove(at: index) + } + } + + func removeChildCoordinators() { + childCoordinators.forEach { $0.removeChildCoordinators() } + childCoordinators.removeAll() + } +} diff --git a/AVIRO/App/Assets.xcassets/AccentColor.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/AccentColor.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/1024.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/1024.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/1024.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/1024.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/114.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/114.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/114.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/114.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/120.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/120.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/120.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/120.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/180.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/180.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/180.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/180.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/29.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/29.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/29.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/29.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/40.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/40.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/40.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/40.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/57.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/57.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/57.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/57.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/58.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/58.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/58.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/58.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/60.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/60.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/60.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/60.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/80.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/80.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/80.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/80.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/87.png b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/87.png similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/87.png rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/87.png diff --git a/AVIRO/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/AppIcon.appiconset/Contents.json rename to AVIRO/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY0.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY0.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY0.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY0.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY1.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY1.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY1.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY1.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY2.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY2.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY2.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY2.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY3.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY3.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY3.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY3.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY4.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY4.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY4.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY4.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY5.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY5.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY5.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY5.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY6.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY6.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY6.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY6.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY7.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY7.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Background Colors/GRAY7.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Background Colors/GRAY7.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/BG NAVY.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/BG NAVY.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/BG NAVY.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/BG NAVY.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/BG RED.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/BG RED.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/BG RED.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/BG RED.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/COBALT.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/COBALT.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/COBALT.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/COBALT.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/GREEN.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/GREEN.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/GREEN.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/GREEN.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/KEYWORD_BLUE.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/KEYWORD_BLUE.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/KEYWORD_BLUE.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/KEYWORD_BLUE.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/ORANGE.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/ORANGE.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/ORANGE.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/ORANGE.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/RED.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/RED.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/RED.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/RED.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/YELLOW.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/YELLOW.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/2.0Main Colors/YELLOW.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/2.0Main Colors/YELLOW.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/ChallengeImageBorder.colorset/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/ChallengeImageBorder.colorset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/ChallengeImageBorder.colorset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/ChallengeImageBorder.colorset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ColorSet/Contents.json b/AVIRO/Resources/Assets.xcassets/ColorSet/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ColorSet/Contents.json rename to AVIRO/Resources/Assets.xcassets/ColorSet/Contents.json diff --git a/AVIRO/App/Assets.xcassets/Contents.json b/AVIRO/Resources/Assets.xcassets/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/Contents.json rename to AVIRO/Resources/Assets.xcassets/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Back.imageset/Back.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Back.imageset/Back.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Back.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Back.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Close.imageset/Close.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Close.imageset/Close.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Close.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Close.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Dots.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Dots.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/DownBack.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/DownBack.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Edit.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Edit.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Flag.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Flag.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Frame.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Frame.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Minus.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Minus.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/More.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/More.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/More.imageset/More.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/More.imageset/More.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/More.imageset/More@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/More.imageset/More@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/More.imageset/More@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/More.imageset/More@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Plus.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Plus.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PushView.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PushView.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Search.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Search.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Search.imageset/Search.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Search.imageset/Search.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/current-location.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/current-location.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/share.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/share.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/share.imageset/share.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/share.imageset/share.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/share.imageset/share@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/share.imageset/share@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/share.imageset/share@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/share.imageset/share@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/star.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/star.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/star.imageset/star.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/star.imageset/star.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/star.imageset/star@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/star.imageset/star@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/star.imageset/star@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/star.imageset/star@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/starDisable.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/starDisable.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/user2.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/user2.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/user2.imageset/user2.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/user2.imageset/user2.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Launchbg.imageset/bg@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/aviro.imageset/aviro@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents 1@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 1.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents 2@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 2.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents 3@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 3.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents 4@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents 4.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Screen/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Screen/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg.png b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg.png b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy.png b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/TabBarIcon/TrophyTab.imageset/Trophy@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Wrapper.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Wrapper.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Wrapper.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Wrapper.png diff --git a/AVIRO/App/Fonts/Pretendard-Black.otf b/AVIRO/Resources/Fonts/Pretendard-Black.otf similarity index 100% rename from AVIRO/App/Fonts/Pretendard-Black.otf rename to AVIRO/Resources/Fonts/Pretendard-Black.otf diff --git a/AVIRO/App/Fonts/Pretendard-Bold.otf b/AVIRO/Resources/Fonts/Pretendard-Bold.otf similarity index 100% rename from AVIRO/App/Fonts/Pretendard-Bold.otf rename to AVIRO/Resources/Fonts/Pretendard-Bold.otf diff --git a/AVIRO/App/Fonts/Pretendard-ExtraBold.otf b/AVIRO/Resources/Fonts/Pretendard-ExtraBold.otf similarity index 100% rename from AVIRO/App/Fonts/Pretendard-ExtraBold.otf rename to AVIRO/Resources/Fonts/Pretendard-ExtraBold.otf diff --git a/AVIRO/App/Fonts/Pretendard-ExtraLight.otf b/AVIRO/Resources/Fonts/Pretendard-ExtraLight.otf similarity index 100% rename from AVIRO/App/Fonts/Pretendard-ExtraLight.otf rename to AVIRO/Resources/Fonts/Pretendard-ExtraLight.otf diff --git a/AVIRO/App/Fonts/Pretendard-Light.otf b/AVIRO/Resources/Fonts/Pretendard-Light.otf similarity index 100% rename from AVIRO/App/Fonts/Pretendard-Light.otf rename to AVIRO/Resources/Fonts/Pretendard-Light.otf diff --git a/AVIRO/App/Fonts/Pretendard-Medium.otf b/AVIRO/Resources/Fonts/Pretendard-Medium.otf similarity index 100% rename from AVIRO/App/Fonts/Pretendard-Medium.otf rename to AVIRO/Resources/Fonts/Pretendard-Medium.otf diff --git a/AVIRO/App/Fonts/Pretendard-Regular.otf b/AVIRO/Resources/Fonts/Pretendard-Regular.otf similarity index 100% rename from AVIRO/App/Fonts/Pretendard-Regular.otf rename to AVIRO/Resources/Fonts/Pretendard-Regular.otf diff --git a/AVIRO/App/Fonts/Pretendard-SemiBold.otf b/AVIRO/Resources/Fonts/Pretendard-SemiBold.otf similarity index 100% rename from AVIRO/App/Fonts/Pretendard-SemiBold.otf rename to AVIRO/Resources/Fonts/Pretendard-SemiBold.otf diff --git a/AVIRO/App/Fonts/Pretendard-Thin.otf b/AVIRO/Resources/Fonts/Pretendard-Thin.otf similarity index 100% rename from AVIRO/App/Fonts/Pretendard-Thin.otf rename to AVIRO/Resources/Fonts/Pretendard-Thin.otf diff --git a/AVIRO/App/Lottie/Berry2.json b/AVIRO/Resources/Lottie/Berry2.json similarity index 100% rename from AVIRO/App/Lottie/Berry2.json rename to AVIRO/Resources/Lottie/Berry2.json From 9bffa71dec1685a4c5852fafa60f58ccb35e460c Mon Sep 17 00:00:00 2001 From: jeonseonghun Date: Thu, 30 May 2024 20:03:12 +0900 Subject: [PATCH 06/37] =?UTF-8?q?[Refector]:=20Data=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 448 +++++++++++++++++- AVIRO/App/AppController.swift | 3 +- .../AppleAuthRepository.swift | 8 + .../AutoLoginRepository.swift | 8 + .../UserAccountRepository.swift | 8 + .../BookmarkListRepository.swift | 8 + .../ChallengeInfoRepository.swift | 8 + .../UserChallengeRepository.swift | 8 + .../ReviewManagementRepository.swift | 8 + .../StoreListRepository.swift | 8 + .../StoreManagementRepository.swift | 8 + .../StoreInfoRepository.swift | 8 + .../StoreMenuRepository.swift | 8 + .../StoreOperationHoursRepository.swift | 8 + .../StoreReviewRepository.swift | 8 + .../StoreSummaryRepository.swift | 8 + .../UserInfoRepository.swift | 8 + .../AppleAuthRepositoryInterface.swift | 8 + .../AutoLoginRepositoryInterface.swift | 8 + .../UserAccountRepositoryInterface.swift | 8 + .../BookmarkListRepositoryInterface.swift | 8 + .../ChallengeInfoRepositoryInterface.swift | 8 + .../UserChallengeRepositoryInterface.swift | 8 + .../ReviewManagementRepositoryInterface.swift | 8 + .../StoreInfoRepositoryInterface.swift | 8 + .../StoreMenuRepositoryInterface.swift | 8 + ...oreOperationHoursRepositoryInterface.swift | 8 + .../StoreReviewRepositoryInterface.swift | 8 + .../StoreSummaryRepositoryInterface.swift | 8 + .../StoreListRepositoryInterface.swift | 8 + .../StoreManagementRepositoryInterface.swift | 8 + .../UserInfoRepositoryInterface.swift | 8 + AVIRO/Domain/UseCases/AuthUseCase.swift | 8 + .../Domain/UseCases/BookmarkListUseCase.swift | 8 + AVIRO/Domain/UseCases/ChallengeUseCase.swift | 8 + AVIRO/Domain/UseCases/ReviewUseCase.swift | 8 + AVIRO/Domain/UseCases/StoreListUseCase.swift | 8 + AVIRO/Domain/UseCases/StoreUseCase.swift | 8 + AVIRO/Domain/UseCases/UserInfoUseCase.swift | 8 + 39 files changed, 740 insertions(+), 7 deletions(-) create mode 100644 AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift create mode 100644 AVIRO/Data/Repositories/AuthRepositories/AutoLoginRepository.swift create mode 100644 AVIRO/Data/Repositories/AuthRepositories/UserAccountRepository.swift create mode 100644 AVIRO/Data/Repositories/BookmarkListRepositories/BookmarkListRepository.swift create mode 100644 AVIRO/Data/Repositories/ChallengeRepositories/ChallengeInfoRepository.swift create mode 100644 AVIRO/Data/Repositories/ChallengeRepositories/UserChallengeRepository.swift create mode 100644 AVIRO/Data/Repositories/ReviewRepositories/ReviewManagementRepository.swift create mode 100644 AVIRO/Data/Repositories/StoreListRepositories/StoreListRepository.swift create mode 100644 AVIRO/Data/Repositories/StoreListRepositories/StoreManagementRepository.swift create mode 100644 AVIRO/Data/Repositories/StoreRepositories/StoreInfoRepository.swift create mode 100644 AVIRO/Data/Repositories/StoreRepositories/StoreMenuRepository.swift create mode 100644 AVIRO/Data/Repositories/StoreRepositories/StoreOperationHoursRepository.swift create mode 100644 AVIRO/Data/Repositories/StoreRepositories/StoreReviewRepository.swift create mode 100644 AVIRO/Data/Repositories/StoreRepositories/StoreSummaryRepository.swift create mode 100644 AVIRO/Data/Repositories/UserInfoRepositories/UserInfoRepository.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AppleAuthRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AutoLoginRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/UserAccountRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/BookmarkListRepositoryInterfaces/BookmarkListRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/ChallengeRepositoryInterfaces/ChallengeInfoRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/ChallengeRepositoryInterfaces/UserChallengeRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/ReviewRepositoryInterfaces/ReviewManagementRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreInfoRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreMenuRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreOperationHoursRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreReviewRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreSummaryRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/StoresRepositoryInterfaces/StoreListRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/StoresRepositoryInterfaces/StoreManagementRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/UserInfoRepositoryInterfaces/UserInfoRepositoryInterface.swift create mode 100644 AVIRO/Domain/UseCases/AuthUseCase.swift create mode 100644 AVIRO/Domain/UseCases/BookmarkListUseCase.swift create mode 100644 AVIRO/Domain/UseCases/ChallengeUseCase.swift create mode 100644 AVIRO/Domain/UseCases/ReviewUseCase.swift create mode 100644 AVIRO/Domain/UseCases/StoreListUseCase.swift create mode 100644 AVIRO/Domain/UseCases/StoreUseCase.swift create mode 100644 AVIRO/Domain/UseCases/UserInfoUseCase.swift diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 7064fb9f..60f9888c 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -266,6 +266,43 @@ C5ED46932AAEB02F00F2DA04 /* PlaceOperationHoursViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED46922AAEB02F00F2DA04 /* PlaceOperationHoursViewController.swift */; }; C5ED46952AAEB3F300F2DA04 /* OperationHourView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED46942AAEB3F300F2DA04 /* OperationHourView.swift */; }; C5ED46982AAEEFB600F2DA04 /* OperationHoursView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED46972AAEEFB600F2DA04 /* OperationHoursView.swift */; }; + C5ED99352C088D290077B2F9 /* StoreListRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99342C088D290077B2F9 /* StoreListRepository.swift */; }; + C5ED99372C088D360077B2F9 /* StoreManagementRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99362C088D360077B2F9 /* StoreManagementRepository.swift */; }; + C5ED99392C088D410077B2F9 /* BookmarkListRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99382C088D410077B2F9 /* BookmarkListRepository.swift */; }; + C5ED993B2C088D4F0077B2F9 /* StoreSummaryRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED993A2C088D4F0077B2F9 /* StoreSummaryRepository.swift */; }; + C5ED993D2C088DD10077B2F9 /* StoreInfoRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED993C2C088DD10077B2F9 /* StoreInfoRepository.swift */; }; + C5ED993F2C088DDC0077B2F9 /* StoreMenuRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED993E2C088DDC0077B2F9 /* StoreMenuRepository.swift */; }; + C5ED99412C088DE40077B2F9 /* StoreReviewRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99402C088DE40077B2F9 /* StoreReviewRepository.swift */; }; + C5ED99432C088DEE0077B2F9 /* StoreOperationHoursRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99422C088DEE0077B2F9 /* StoreOperationHoursRepository.swift */; }; + C5ED99452C088E000077B2F9 /* ReviewManagementRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99442C088E000077B2F9 /* ReviewManagementRepository.swift */; }; + C5ED99472C088E0F0077B2F9 /* ChallengeInfoRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99462C088E0F0077B2F9 /* ChallengeInfoRepository.swift */; }; + C5ED99492C088E1B0077B2F9 /* UserChallengeRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99482C088E1B0077B2F9 /* UserChallengeRepository.swift */; }; + C5ED994B2C088E240077B2F9 /* UserInfoRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED994A2C088E240077B2F9 /* UserInfoRepository.swift */; }; + C5ED994D2C088E2C0077B2F9 /* AppleAuthRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED994C2C088E2C0077B2F9 /* AppleAuthRepository.swift */; }; + C5ED994F2C088E340077B2F9 /* AutoLoginRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED994E2C088E340077B2F9 /* AutoLoginRepository.swift */; }; + C5ED99512C088E3E0077B2F9 /* UserAccountRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99502C088E3E0077B2F9 /* UserAccountRepository.swift */; }; + C5ED995A2C088EE30077B2F9 /* AppleAuthRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99592C088EE30077B2F9 /* AppleAuthRepositoryInterface.swift */; }; + C5ED995C2C088EEF0077B2F9 /* AutoLoginRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED995B2C088EEF0077B2F9 /* AutoLoginRepositoryInterface.swift */; }; + C5ED995E2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED995D2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift */; }; + C5ED99602C088FAA0077B2F9 /* UserInfoRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED995F2C088FAA0077B2F9 /* UserInfoRepositoryInterface.swift */; }; + C5ED99622C088FB50077B2F9 /* UserChallengeRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99612C088FB50077B2F9 /* UserChallengeRepositoryInterface.swift */; }; + C5ED99642C088FC10077B2F9 /* ChallengeInfoRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99632C088FC10077B2F9 /* ChallengeInfoRepositoryInterface.swift */; }; + C5ED99662C088FD30077B2F9 /* ReviewManagementRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99652C088FD30077B2F9 /* ReviewManagementRepositoryInterface.swift */; }; + C5ED99682C088FE60077B2F9 /* StoreOperationHoursRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99672C088FE60077B2F9 /* StoreOperationHoursRepositoryInterface.swift */; }; + C5ED996A2C0890B30077B2F9 /* StoreReviewRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99692C0890B30077B2F9 /* StoreReviewRepositoryInterface.swift */; }; + C5ED996C2C0890C30077B2F9 /* StoreMenuRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED996B2C0890C30077B2F9 /* StoreMenuRepositoryInterface.swift */; }; + C5ED996E2C0890CE0077B2F9 /* StoreInfoRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED996D2C0890CE0077B2F9 /* StoreInfoRepositoryInterface.swift */; }; + C5ED99702C0890DB0077B2F9 /* StoreSummaryRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED996F2C0890DB0077B2F9 /* StoreSummaryRepositoryInterface.swift */; }; + C5ED99722C0891FC0077B2F9 /* BookmarkListRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99712C0891FC0077B2F9 /* BookmarkListRepositoryInterface.swift */; }; + C5ED99742C0892060077B2F9 /* StoreListRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99732C0892060077B2F9 /* StoreListRepositoryInterface.swift */; }; + C5ED99762C0892170077B2F9 /* StoreManagementRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99752C0892170077B2F9 /* StoreManagementRepositoryInterface.swift */; }; + C5ED99782C0892C70077B2F9 /* AuthUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99772C0892C70077B2F9 /* AuthUseCase.swift */; }; + C5ED997A2C0892CF0077B2F9 /* UserInfoUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99792C0892CF0077B2F9 /* UserInfoUseCase.swift */; }; + C5ED997C2C0892D90077B2F9 /* ChallengeUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED997B2C0892D90077B2F9 /* ChallengeUseCase.swift */; }; + C5ED997E2C0892F80077B2F9 /* ReviewUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED997D2C0892F80077B2F9 /* ReviewUseCase.swift */; }; + C5ED99802C08930B0077B2F9 /* StoreUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED997F2C08930B0077B2F9 /* StoreUseCase.swift */; }; + C5ED99822C0893180077B2F9 /* BookmarkListUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99812C0893180077B2F9 /* BookmarkListUseCase.swift */; }; + C5ED99842C0893210077B2F9 /* StoreListUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99832C0893210077B2F9 /* StoreListUseCase.swift */; }; C5F1014F2A6D19A800C53286 /* VeganOptionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5F1014E2A6D19A800C53286 /* VeganOptionButton.swift */; }; C5F33DFD2ADED19000A29FB9 /* SystemUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5F33DFC2ADED19000A29FB9 /* SystemUtility.swift */; }; C5FA0EAA2A94DB3E004AD8B4 /* ReportReviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5FA0EA92A94DB3E004AD8B4 /* ReportReviewViewController.swift */; }; @@ -565,6 +602,43 @@ C5ED46922AAEB02F00F2DA04 /* PlaceOperationHoursViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceOperationHoursViewController.swift; sourceTree = ""; }; C5ED46942AAEB3F300F2DA04 /* OperationHourView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperationHourView.swift; sourceTree = ""; }; C5ED46972AAEEFB600F2DA04 /* OperationHoursView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OperationHoursView.swift; sourceTree = ""; }; + C5ED99342C088D290077B2F9 /* StoreListRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreListRepository.swift; sourceTree = ""; }; + C5ED99362C088D360077B2F9 /* StoreManagementRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreManagementRepository.swift; sourceTree = ""; }; + C5ED99382C088D410077B2F9 /* BookmarkListRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkListRepository.swift; sourceTree = ""; }; + C5ED993A2C088D4F0077B2F9 /* StoreSummaryRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreSummaryRepository.swift; sourceTree = ""; }; + C5ED993C2C088DD10077B2F9 /* StoreInfoRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreInfoRepository.swift; sourceTree = ""; }; + C5ED993E2C088DDC0077B2F9 /* StoreMenuRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreMenuRepository.swift; sourceTree = ""; }; + C5ED99402C088DE40077B2F9 /* StoreReviewRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreReviewRepository.swift; sourceTree = ""; }; + C5ED99422C088DEE0077B2F9 /* StoreOperationHoursRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreOperationHoursRepository.swift; sourceTree = ""; }; + C5ED99442C088E000077B2F9 /* ReviewManagementRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewManagementRepository.swift; sourceTree = ""; }; + C5ED99462C088E0F0077B2F9 /* ChallengeInfoRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChallengeInfoRepository.swift; sourceTree = ""; }; + C5ED99482C088E1B0077B2F9 /* UserChallengeRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserChallengeRepository.swift; sourceTree = ""; }; + C5ED994A2C088E240077B2F9 /* UserInfoRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoRepository.swift; sourceTree = ""; }; + C5ED994C2C088E2C0077B2F9 /* AppleAuthRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleAuthRepository.swift; sourceTree = ""; }; + C5ED994E2C088E340077B2F9 /* AutoLoginRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoLoginRepository.swift; sourceTree = ""; }; + C5ED99502C088E3E0077B2F9 /* UserAccountRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAccountRepository.swift; sourceTree = ""; }; + C5ED99592C088EE30077B2F9 /* AppleAuthRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleAuthRepositoryInterface.swift; sourceTree = ""; }; + C5ED995B2C088EEF0077B2F9 /* AutoLoginRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoLoginRepositoryInterface.swift; sourceTree = ""; }; + C5ED995D2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAccountRepositoryInterface.swift; sourceTree = ""; }; + C5ED995F2C088FAA0077B2F9 /* UserInfoRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoRepositoryInterface.swift; sourceTree = ""; }; + C5ED99612C088FB50077B2F9 /* UserChallengeRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserChallengeRepositoryInterface.swift; sourceTree = ""; }; + C5ED99632C088FC10077B2F9 /* ChallengeInfoRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChallengeInfoRepositoryInterface.swift; sourceTree = ""; }; + C5ED99652C088FD30077B2F9 /* ReviewManagementRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewManagementRepositoryInterface.swift; sourceTree = ""; }; + C5ED99672C088FE60077B2F9 /* StoreOperationHoursRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreOperationHoursRepositoryInterface.swift; sourceTree = ""; }; + C5ED99692C0890B30077B2F9 /* StoreReviewRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreReviewRepositoryInterface.swift; sourceTree = ""; }; + C5ED996B2C0890C30077B2F9 /* StoreMenuRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreMenuRepositoryInterface.swift; sourceTree = ""; }; + C5ED996D2C0890CE0077B2F9 /* StoreInfoRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreInfoRepositoryInterface.swift; sourceTree = ""; }; + C5ED996F2C0890DB0077B2F9 /* StoreSummaryRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreSummaryRepositoryInterface.swift; sourceTree = ""; }; + C5ED99712C0891FC0077B2F9 /* BookmarkListRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkListRepositoryInterface.swift; sourceTree = ""; }; + C5ED99732C0892060077B2F9 /* StoreListRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreListRepositoryInterface.swift; sourceTree = ""; }; + C5ED99752C0892170077B2F9 /* StoreManagementRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreManagementRepositoryInterface.swift; sourceTree = ""; }; + C5ED99772C0892C70077B2F9 /* AuthUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthUseCase.swift; sourceTree = ""; }; + C5ED99792C0892CF0077B2F9 /* UserInfoUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoUseCase.swift; sourceTree = ""; }; + C5ED997B2C0892D90077B2F9 /* ChallengeUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChallengeUseCase.swift; sourceTree = ""; }; + C5ED997D2C0892F80077B2F9 /* ReviewUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewUseCase.swift; sourceTree = ""; }; + C5ED997F2C08930B0077B2F9 /* StoreUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreUseCase.swift; sourceTree = ""; }; + C5ED99812C0893180077B2F9 /* BookmarkListUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkListUseCase.swift; sourceTree = ""; }; + C5ED99832C0893210077B2F9 /* StoreListUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreListUseCase.swift; sourceTree = ""; }; C5F1014E2A6D19A800C53286 /* VeganOptionButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VeganOptionButton.swift; sourceTree = ""; }; C5F33DFC2ADED19000A29FB9 /* SystemUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemUtility.swift; sourceTree = ""; }; C5F33DFE2ADFC5B600A29FB9 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/LaunchScreen.strings; sourceTree = ""; }; @@ -1763,7 +1837,7 @@ children = ( C5BA9E012BED1CB1004FA06E /* Common */, C5BA9E022BED1CB7004FA06E /* Network */, - C5BA9E032BED1CBF004FA06E /* PresistentStorages */, + C5BA9E032BED1CBF004FA06E /* PresistentStorges */, C5BA9E042BED1CD2004FA06E /* Repositories */, ); path = Data; @@ -1773,7 +1847,7 @@ isa = PBXGroup; children = ( C5BA9E072BED1CF8004FA06E /* Entities */, - C5BA9E062BED1CF0004FA06E /* Interfaces */, + C5BA9E062BED1CF0004FA06E /* RepositoryInterfaces */, C5BA9E052BED1CE8004FA06E /* UseCases */, ); path = Domain; @@ -1799,20 +1873,33 @@ C5BA9E022BED1CB7004FA06E /* Network */ = { isa = PBXGroup; children = ( + C5ED99322C088D050077B2F9 /* DataMapping */, + C5ED99332C088D0E0077B2F9 /* Targets */, ); path = Network; sourceTree = ""; }; - C5BA9E032BED1CBF004FA06E /* PresistentStorages */ = { + C5BA9E032BED1CBF004FA06E /* PresistentStorges */ = { isa = PBXGroup; children = ( + C5ED99312C088CE80077B2F9 /* UserInfoStorage */, + C5ED992F2C088CC50077B2F9 /* StoreRawModelsStorge */, + C5ED99302C088CD90077B2F9 /* BookmarkListStorage */, + C5ED992E2C088CAA0077B2F9 /* SearchHistoryStorge */, ); - path = PresistentStorages; + path = PresistentStorges; sourceTree = ""; }; C5BA9E042BED1CD2004FA06E /* Repositories */ = { isa = PBXGroup; children = ( + C5ED992D2C0880800077B2F9 /* StoreListRepositories */, + C5ED992C2C08807A0077B2F9 /* BookmarkListRepositories */, + C5ED992B2C0880710077B2F9 /* StoreRepositories */, + C5ED992A2C0880660077B2F9 /* ReviewRepositories */, + C5ED99292C08805A0077B2F9 /* ChallengeRepositories */, + C5ED99282C08804E0077B2F9 /* UserInfoRepositories */, + C5ED99272C08803D0077B2F9 /* AuthRepositories */, ); path = Repositories; sourceTree = ""; @@ -1820,15 +1907,29 @@ C5BA9E052BED1CE8004FA06E /* UseCases */ = { isa = PBXGroup; children = ( + C5ED99832C0893210077B2F9 /* StoreListUseCase.swift */, + C5ED99812C0893180077B2F9 /* BookmarkListUseCase.swift */, + C5ED997F2C08930B0077B2F9 /* StoreUseCase.swift */, + C5ED997D2C0892F80077B2F9 /* ReviewUseCase.swift */, + C5ED997B2C0892D90077B2F9 /* ChallengeUseCase.swift */, + C5ED99792C0892CF0077B2F9 /* UserInfoUseCase.swift */, + C5ED99772C0892C70077B2F9 /* AuthUseCase.swift */, ); path = UseCases; sourceTree = ""; }; - C5BA9E062BED1CF0004FA06E /* Interfaces */ = { + C5BA9E062BED1CF0004FA06E /* RepositoryInterfaces */ = { isa = PBXGroup; children = ( + C5ED99582C088EC90077B2F9 /* StoresRepositoryInterfaces */, + C5ED99572C088EB10077B2F9 /* BookmarkListRepositoryInterfaces */, + C5ED99562C088EA60077B2F9 /* StoreRepositoryInterfaces */, + C5ED99552C088E9D0077B2F9 /* ReviewRepositoryInterfaces */, + C5ED99542C088E950077B2F9 /* ChallengeRepositoryInterfaces */, + C5ED99532C088E880077B2F9 /* UserInfoRepositoryInterfaces */, + C5ED99522C088E690077B2F9 /* AuthRepositoryInterfaces */, ); - path = Interfaces; + path = RepositoryInterfaces; sourceTree = ""; }; C5BA9E072BED1CF8004FA06E /* Entities */ = { @@ -2214,6 +2315,304 @@ path = PlaceOperationSubView; sourceTree = ""; }; + C5ED99272C08803D0077B2F9 /* AuthRepositories */ = { + isa = PBXGroup; + children = ( + C5ED994C2C088E2C0077B2F9 /* AppleAuthRepository.swift */, + C5ED994E2C088E340077B2F9 /* AutoLoginRepository.swift */, + C5ED99502C088E3E0077B2F9 /* UserAccountRepository.swift */, + ); + path = AuthRepositories; + sourceTree = ""; + }; + C5ED99282C08804E0077B2F9 /* UserInfoRepositories */ = { + isa = PBXGroup; + children = ( + C5ED994A2C088E240077B2F9 /* UserInfoRepository.swift */, + ); + path = UserInfoRepositories; + sourceTree = ""; + }; + C5ED99292C08805A0077B2F9 /* ChallengeRepositories */ = { + isa = PBXGroup; + children = ( + C5ED99462C088E0F0077B2F9 /* ChallengeInfoRepository.swift */, + C5ED99482C088E1B0077B2F9 /* UserChallengeRepository.swift */, + ); + path = ChallengeRepositories; + sourceTree = ""; + }; + C5ED992A2C0880660077B2F9 /* ReviewRepositories */ = { + isa = PBXGroup; + children = ( + C5ED99442C088E000077B2F9 /* ReviewManagementRepository.swift */, + ); + path = ReviewRepositories; + sourceTree = ""; + }; + C5ED992B2C0880710077B2F9 /* StoreRepositories */ = { + isa = PBXGroup; + children = ( + C5ED993A2C088D4F0077B2F9 /* StoreSummaryRepository.swift */, + C5ED993C2C088DD10077B2F9 /* StoreInfoRepository.swift */, + C5ED993E2C088DDC0077B2F9 /* StoreMenuRepository.swift */, + C5ED99402C088DE40077B2F9 /* StoreReviewRepository.swift */, + C5ED99422C088DEE0077B2F9 /* StoreOperationHoursRepository.swift */, + ); + path = StoreRepositories; + sourceTree = ""; + }; + C5ED992C2C08807A0077B2F9 /* BookmarkListRepositories */ = { + isa = PBXGroup; + children = ( + C5ED99382C088D410077B2F9 /* BookmarkListRepository.swift */, + ); + path = BookmarkListRepositories; + sourceTree = ""; + }; + C5ED992D2C0880800077B2F9 /* StoreListRepositories */ = { + isa = PBXGroup; + children = ( + C5ED99342C088D290077B2F9 /* StoreListRepository.swift */, + C5ED99362C088D360077B2F9 /* StoreManagementRepository.swift */, + ); + path = StoreListRepositories; + sourceTree = ""; + }; + C5ED992E2C088CAA0077B2F9 /* SearchHistoryStorge */ = { + isa = PBXGroup; + children = ( + ); + path = SearchHistoryStorge; + sourceTree = ""; + }; + C5ED992F2C088CC50077B2F9 /* StoreRawModelsStorge */ = { + isa = PBXGroup; + children = ( + ); + path = StoreRawModelsStorge; + sourceTree = ""; + }; + C5ED99302C088CD90077B2F9 /* BookmarkListStorage */ = { + isa = PBXGroup; + children = ( + ); + path = BookmarkListStorage; + sourceTree = ""; + }; + C5ED99312C088CE80077B2F9 /* UserInfoStorage */ = { + isa = PBXGroup; + children = ( + ); + path = UserInfoStorage; + sourceTree = ""; + }; + C5ED99322C088D050077B2F9 /* DataMapping */ = { + isa = PBXGroup; + children = ( + C5ED99862C0893C50077B2F9 /* Request */, + C5ED99852C0893BD0077B2F9 /* Response */, + ); + path = DataMapping; + sourceTree = ""; + }; + C5ED99332C088D0E0077B2F9 /* Targets */ = { + isa = PBXGroup; + children = ( + ); + path = Targets; + sourceTree = ""; + }; + C5ED99522C088E690077B2F9 /* AuthRepositoryInterfaces */ = { + isa = PBXGroup; + children = ( + C5ED99592C088EE30077B2F9 /* AppleAuthRepositoryInterface.swift */, + C5ED995B2C088EEF0077B2F9 /* AutoLoginRepositoryInterface.swift */, + C5ED995D2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift */, + ); + path = AuthRepositoryInterfaces; + sourceTree = ""; + }; + C5ED99532C088E880077B2F9 /* UserInfoRepositoryInterfaces */ = { + isa = PBXGroup; + children = ( + C5ED995F2C088FAA0077B2F9 /* UserInfoRepositoryInterface.swift */, + ); + path = UserInfoRepositoryInterfaces; + sourceTree = ""; + }; + C5ED99542C088E950077B2F9 /* ChallengeRepositoryInterfaces */ = { + isa = PBXGroup; + children = ( + C5ED99612C088FB50077B2F9 /* UserChallengeRepositoryInterface.swift */, + C5ED99632C088FC10077B2F9 /* ChallengeInfoRepositoryInterface.swift */, + ); + path = ChallengeRepositoryInterfaces; + sourceTree = ""; + }; + C5ED99552C088E9D0077B2F9 /* ReviewRepositoryInterfaces */ = { + isa = PBXGroup; + children = ( + C5ED99652C088FD30077B2F9 /* ReviewManagementRepositoryInterface.swift */, + ); + path = ReviewRepositoryInterfaces; + sourceTree = ""; + }; + C5ED99562C088EA60077B2F9 /* StoreRepositoryInterfaces */ = { + isa = PBXGroup; + children = ( + C5ED996F2C0890DB0077B2F9 /* StoreSummaryRepositoryInterface.swift */, + C5ED996D2C0890CE0077B2F9 /* StoreInfoRepositoryInterface.swift */, + C5ED996B2C0890C30077B2F9 /* StoreMenuRepositoryInterface.swift */, + C5ED99692C0890B30077B2F9 /* StoreReviewRepositoryInterface.swift */, + C5ED99672C088FE60077B2F9 /* StoreOperationHoursRepositoryInterface.swift */, + ); + path = StoreRepositoryInterfaces; + sourceTree = ""; + }; + C5ED99572C088EB10077B2F9 /* BookmarkListRepositoryInterfaces */ = { + isa = PBXGroup; + children = ( + C5ED99712C0891FC0077B2F9 /* BookmarkListRepositoryInterface.swift */, + ); + path = BookmarkListRepositoryInterfaces; + sourceTree = ""; + }; + C5ED99582C088EC90077B2F9 /* StoresRepositoryInterfaces */ = { + isa = PBXGroup; + children = ( + C5ED99732C0892060077B2F9 /* StoreListRepositoryInterface.swift */, + C5ED99752C0892170077B2F9 /* StoreManagementRepositoryInterface.swift */, + ); + path = StoresRepositoryInterfaces; + sourceTree = ""; + }; + C5ED99852C0893BD0077B2F9 /* Response */ = { + isa = PBXGroup; + children = ( + C5ED99942C0894400077B2F9 /* StoreList */, + C5ED99932C0894390077B2F9 /* BookmarkList */, + C5ED99922C0894350077B2F9 /* Store */, + C5ED99912C0894320077B2F9 /* Review */, + C5ED99902C08942B0077B2F9 /* Challenge */, + C5ED998F2C0894270077B2F9 /* UserInfo */, + C5ED998E2C0894210077B2F9 /* Auth */, + ); + path = Response; + sourceTree = ""; + }; + C5ED99862C0893C50077B2F9 /* Request */ = { + isa = PBXGroup; + children = ( + C5ED998D2C0894170077B2F9 /* StoreList */, + C5ED998C2C0894100077B2F9 /* BookmarkList */, + C5ED998B2C08940B0077B2F9 /* Store */, + C5ED998A2C0894060077B2F9 /* Review */, + C5ED99892C0894010077B2F9 /* Challenge */, + C5ED99882C0893FD0077B2F9 /* UserInfo */, + C5ED99872C0893F20077B2F9 /* Auth */, + ); + path = Request; + sourceTree = ""; + }; + C5ED99872C0893F20077B2F9 /* Auth */ = { + isa = PBXGroup; + children = ( + ); + path = Auth; + sourceTree = ""; + }; + C5ED99882C0893FD0077B2F9 /* UserInfo */ = { + isa = PBXGroup; + children = ( + ); + path = UserInfo; + sourceTree = ""; + }; + C5ED99892C0894010077B2F9 /* Challenge */ = { + isa = PBXGroup; + children = ( + ); + path = Challenge; + sourceTree = ""; + }; + C5ED998A2C0894060077B2F9 /* Review */ = { + isa = PBXGroup; + children = ( + ); + path = Review; + sourceTree = ""; + }; + C5ED998B2C08940B0077B2F9 /* Store */ = { + isa = PBXGroup; + children = ( + ); + path = Store; + sourceTree = ""; + }; + C5ED998C2C0894100077B2F9 /* BookmarkList */ = { + isa = PBXGroup; + children = ( + ); + path = BookmarkList; + sourceTree = ""; + }; + C5ED998D2C0894170077B2F9 /* StoreList */ = { + isa = PBXGroup; + children = ( + ); + path = StoreList; + sourceTree = ""; + }; + C5ED998E2C0894210077B2F9 /* Auth */ = { + isa = PBXGroup; + children = ( + ); + path = Auth; + sourceTree = ""; + }; + C5ED998F2C0894270077B2F9 /* UserInfo */ = { + isa = PBXGroup; + children = ( + ); + path = UserInfo; + sourceTree = ""; + }; + C5ED99902C08942B0077B2F9 /* Challenge */ = { + isa = PBXGroup; + children = ( + ); + path = Challenge; + sourceTree = ""; + }; + C5ED99912C0894320077B2F9 /* Review */ = { + isa = PBXGroup; + children = ( + ); + path = Review; + sourceTree = ""; + }; + C5ED99922C0894350077B2F9 /* Store */ = { + isa = PBXGroup; + children = ( + ); + path = Store; + sourceTree = ""; + }; + C5ED99932C0894390077B2F9 /* BookmarkList */ = { + isa = PBXGroup; + children = ( + ); + path = BookmarkList; + sourceTree = ""; + }; + C5ED99942C0894400077B2F9 /* StoreList */ = { + isa = PBXGroup; + children = ( + ); + path = StoreList; + sourceTree = ""; + }; C5FA0EA72A94D92B004AD8B4 /* Report */ = { isa = PBXGroup; children = ( @@ -2522,6 +2921,7 @@ C562B6DF2B387AE200CE5D4C /* ChallengeInfoViewController.swift in Sources */, C5C915492A777F8500C7CB93 /* SearchField.swift in Sources */, C52066212A7CA9050038ECCD /* MainField.swift in Sources */, + C5ED99622C088FB50077B2F9 /* UserChallengeRepositoryInterface.swift in Sources */, C5EB510B2A209FD300B29CC1 /* HomeSearchPresenter.swift in Sources */, C5DBF8412B3A787800668B0D /* CGFloat+Extension.swift in Sources */, C52066262A7CC3CE0038ECCD /* NoHistoryLabelView.swift in Sources */, @@ -2531,6 +2931,7 @@ C5F1014F2A6D19A800C53286 /* VeganOptionButton.swift in Sources */, C505C1DD2B3ACCC40058F115 /* AVIROChallengeInfoResult+DTO.swift in Sources */, C52066292A7CD5FC0038ECCD /* HistoryTableModel.swift in Sources */, + C5ED995C2C088EEF0077B2F9 /* AutoLoginRepositoryInterface.swift in Sources */, C5FD92EB2A9C786600CF4673 /* PublicAPIRequestComponents.swift in Sources */, C58C49C82AC9B67600DE04B7 /* AppleUserLoginModel.swift in Sources */, C5BA9E172BED2585004FA06E /* printIfDebug.swift in Sources */, @@ -2544,6 +2945,7 @@ C595ACD12A84A4EB00D35123 /* PlaceSummaryView.swift in Sources */, C520663A2A808DC40038ECCD /* PlaceListHeaderView.swift in Sources */, C52066382A808DAD0038ECCD /* HistoryHeaderView.swift in Sources */, + C5ED99842C0893210077B2F9 /* StoreListUseCase.swift in Sources */, C5C290742A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift in Sources */, C52FA3472A175B20005E70DC /* HomeViewController.swift in Sources */, C5503B5C2B9F54C20050643F /* WelcomeCollectionViewCell.swift in Sources */, @@ -2553,14 +2955,17 @@ C5BA9DCF2BE8ABA8004FA06E /* NetworkConfigurable.swift in Sources */, C5C290812A8616E500ED5DCE /* PlaceInfoView.swift in Sources */, C5B071E12A59454300AE709A /* BottomCell.swift in Sources */, + C5ED99512C088E3E0077B2F9 /* UserAccountRepository.swift in Sources */, C51000382AB5F3BD00F65C1F /* UIFont+Extension.swift in Sources */, C56295072B3188530067BBE5 /* ReviewWriteViewController.swift in Sources */, + C5ED995A2C088EE30077B2F9 /* AppleAuthRepositoryInterface.swift in Sources */, C5476B7B2B31516000F5FC6E /* LicenseDetailViewController.swift in Sources */, C5FBDA602B398280007AC77E /* ChallengeInfoOrangeView.swift in Sources */, C5FA0EAA2A94DB3E004AD8B4 /* ReportReviewViewController.swift in Sources */, C5C90EBD2AA85E7000AB3668 /* AVIROOperationHours+DTO.swift in Sources */, C5F33DFD2ADED19000A29FB9 /* SystemUtility.swift in Sources */, C513854E2AAD8E9F001AB827 /* AVIROReportPlace+DTO.swift in Sources */, + C5ED996A2C0890B30077B2F9 /* StoreReviewRepositoryInterface.swift in Sources */, C520663C2A80C0450038ECCD /* CenterCoordinate.swift in Sources */, C58EC7D22AB1B5AD00401FF7 /* AVIROEditPhone+DTO.swift in Sources */, C5C961932A8D9EE20016E2F8 /* PlaceMenuTableViewCell.swift in Sources */, @@ -2584,30 +2989,37 @@ C5FBDA5C2B398264007AC77E /* ChallengeInfoYellowView.swift in Sources */, C5DCBC8F2B91CF46003502BA /* AVIROMyBookmarkList+DTO.swift in Sources */, C5D93DA32A58718300629C39 /* NextPageButton.swift in Sources */, + C5ED99602C088FAA0077B2F9 /* UserInfoRepositoryInterface.swift in Sources */, C5BA9E0E2BED1D75004FA06E /* AVIROViewModel.swift in Sources */, C50DB7512A9B83550078B501 /* ChangeableAddressViewController.swift in Sources */, + C5ED99762C0892170077B2F9 /* StoreManagementRepositoryInterface.swift in Sources */, C5BA9E142BED2244004FA06E /* BaseCoordinator.swift in Sources */, C5A989992A959E040021B7C3 /* AVIROBookmark+DTO.swift in Sources */, C54B591D2B95F61F00C0B190 /* MyCommentListTableViewCell.swift in Sources */, C5476B6E2B30760000F5FC6E /* ChallengeLevelView.swift in Sources */, C51000582AB939A200F65C1F /* NoResultLabel.swift in Sources */, + C5ED99722C0891FC0077B2F9 /* BookmarkListRepositoryInterface.swift in Sources */, C5D802722B3C6E5E00136D0E /* LevelUpAlertView.swift in Sources */, C58EC7D02AB1B59100401FF7 /* AVIROEditLocation+DTO.swift in Sources */, C5803F582A88C1990064A853 /* PlaceTopModel.swift in Sources */, C5D36D2E2A76031E003328E8 /* Double+Extension.swift in Sources */, + C5ED99642C088FC10077B2F9 /* ChallengeInfoRepositoryInterface.swift in Sources */, C5EB51082A209F6900B29CC1 /* HomeSearchViewController.swift in Sources */, C5503B5E2B9F55D70050643F /* UIView+Extension.swift in Sources */, C5538AAF2A1BB81200661DE2 /* AVIROEnrollPlace+DTO.swift in Sources */, C51000552AB8123600F65C1F /* AVIROReportReview+DTO.swift in Sources */, C5BA9DF42BECC902004FA06E /* NetworkErrorLogger.swift in Sources */, C50F6AF32A68FD0A00E942F5 /* EnrollPlaceViewController.swift in Sources */, + C5ED99472C088E0F0077B2F9 /* ChallengeInfoRepository.swift in Sources */, C5732C7E2A41D42700CDC499 /* RequestTableFieldModel.swift in Sources */, + C5ED99782C0892C70077B2F9 /* AuthUseCase.swift in Sources */, C5C961982A8DA5880016E2F8 /* EditInfoButton.swift in Sources */, C5476B682B303BE800F5FC6E /* MyInfoView.swift in Sources */, C5A989972A959D920021B7C3 /* AVIROUpdateBookmark+DTO.swift in Sources */, C5E7B7A92A4D3CDF00CA2090 /* AVIROUser+DTO.swift in Sources */, C5A201C32A98A61F00A54381 /* EditLocationBottomView.swift in Sources */, C5DCBC8B2B91CEE8003502BA /* AVIROMyCommentList+DTO.swift in Sources */, + C5ED994F2C088E340077B2F9 /* AutoLoginRepository.swift in Sources */, C52066232A7CAC910038ECCD /* NoHistoryView.swift in Sources */, C5E306E72A6FB4ED00C11CF7 /* MenuField.swift in Sources */, C5ED46982AAEEFB600F2DA04 /* OperationHoursView.swift in Sources */, @@ -2615,6 +3027,7 @@ C51AED212A8B2BDB0015FBC2 /* HomeMapReferButton.swift in Sources */, C5E430B32A5DADBE00CB67EC /* SecondRegistrationPresenter.swift in Sources */, C5EB510D2A20A4B400B29CC1 /* HomeSearchViewTableViewCell.swift in Sources */, + C5ED99432C088DEE0077B2F9 /* StoreOperationHoursRepository.swift in Sources */, C510005C2AB9C39500F65C1F /* MarkerModelManager.swift in Sources */, C5FD92ED2A9C7AE800CF4673 /* PublicAPI.swift in Sources */, C50367F52A1795D10020C6BB /* HomeViewPresenter.swift in Sources */, @@ -2626,17 +3039,24 @@ C5C90EB22AA5EC9E00AB3668 /* EditMenuChangedMarkerModel.swift in Sources */, C51B09BA2A8215D800916BBD /* MarkerModel.swift in Sources */, C52FA3452A175B20005E70DC /* SceneDelegate.swift in Sources */, + C5ED99412C088DE40077B2F9 /* StoreReviewRepository.swift in Sources */, C5351B542A19A7B100116D50 /* UserCoordinate.swift in Sources */, C5EB50EA2A1C705900B29CC1 /* SettingViewController.swift in Sources */, + C5ED993D2C088DD10077B2F9 /* StoreInfoRepository.swift in Sources */, + C5ED995E2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift in Sources */, + C5ED99742C0892060077B2F9 /* StoreListRepositoryInterface.swift in Sources */, C5BA9E192BED25D2004FA06E /* DIContainer.swift in Sources */, C5D802702B3C6E4000136D0E /* RecommendPlaceAlertView.swift in Sources */, C510005A2AB998F600F65C1F /* UIImage+Extension.swift in Sources */, C5FBDA5E2B398270007AC77E /* ChallengeInfoGreenView.swift in Sources */, C5D8E8632A3DEC3900D88A43 /* String+Extension.swift in Sources */, C58EC7D62AB1B61500401FF7 /* AVIROEditCommonBeforeAfterDTO.swift in Sources */, + C5ED99702C0890DB0077B2F9 /* StoreSummaryRepositoryInterface.swift in Sources */, + C5ED997C2C0892D90077B2F9 /* ChallengeUseCase.swift in Sources */, C58EC7CE2AB1B57100401FF7 /* AVIROEditOperationTime+DTO.swift in Sources */, C50DB7542A9B838F0078B501 /* ChangeableAddressPresenter.swift in Sources */, C5DCBC9D2B91D9F5003502BA /* MyPlaceListViewController.swift in Sources */, + C5ED99662C088FD30077B2F9 /* ReviewManagementRepositoryInterface.swift in Sources */, C58EC7D42AB1B5C400401FF7 /* AVIROEditURL+DTO.swift in Sources */, C50F6B022A6BC8E400E942F5 /* EnrollField.swift in Sources */, C552D5342ABE8CA500933D8A /* AVIRODeleteAPI.swift in Sources */, @@ -2645,6 +3065,7 @@ C58FBF942AC2DB6D00AB6EFC /* KakaoKeywordResultDTO.swift in Sources */, C51B09B82A82155200916BBD /* MarkerModelCache.swift in Sources */, C54B59172B95F3D000C0B190 /* MyBookmarkListTableViewCell.swift in Sources */, + C5ED993B2C088D4F0077B2F9 /* StoreSummaryRepository.swift in Sources */, C5A9899B2A95A6B50021B7C3 /* BookmarkCache.swift in Sources */, C52651DE2B7FB8B0002038CF /* CategoryCollectionViewCell.swift in Sources */, C520662D2A7CE1CC0038ECCD /* SearchHistoryManager.swift in Sources */, @@ -2668,12 +3089,14 @@ C52066332A7E80350038ECCD /* MatchedPlaceCellModel.swift in Sources */, C595ACCD2A84A1A200D35123 /* PlaceView.swift in Sources */, C51385422AAADB0E001AB827 /* EditNickNameButton.swift in Sources */, + C5ED997A2C0892CF0077B2F9 /* UserInfoUseCase.swift in Sources */, C547A8BA2A17D8D4004D1339 /* KakaoAPI.swift in Sources */, C5732C772A41A0A500CDC499 /* AVIROMapMarker+DTO.swift in Sources */, C5FF13532A42C8810026981D /* AVIROPlaceInfo+DTO.swift in Sources */, C5351B5C2A19F60200116D50 /* SearchPlacePresenter.swift in Sources */, C562B6E42B387CA200CE5D4C /* ChallengeInfoPresentaionDelegate.swift in Sources */, C53833652B9C7B6100ED6A50 /* UINavigationController+Extension.swift in Sources */, + C5ED993F2C088DDC0077B2F9 /* StoreMenuRepository.swift in Sources */, C513854A2AAB3B13001AB827 /* NickNameChangebleViewController.swift in Sources */, C50E6F6F2A8F10B500703B9E /* UILabel+Extension.swift in Sources */, C52066352A7F3FAE0038ECCD /* HistoryTableViewCell.swift in Sources */, @@ -2682,6 +3105,8 @@ C54733D32BE20EF4004E961C /* SearchUtility.swift in Sources */, C528E4BA2A5F9A3E002BD72E /* ThridRegistrationViewController.swift in Sources */, C528E4BC2A5F9AB6002BD72E /* ThridRegistrationPresenter.swift in Sources */, + C5ED997E2C0892F80077B2F9 /* ReviewUseCase.swift in Sources */, + C5ED99392C088D410077B2F9 /* BookmarkListRepository.swift in Sources */, C51000612ABAE61F00F65C1F /* ReportReviewModel.swift in Sources */, C5C290792A85E51000ED5DCE /* PlaceMenuView.swift in Sources */, C54B76612B88B2D10095E110 /* FranchiseToggleButton.swift in Sources */, @@ -2689,6 +3114,7 @@ C5DCBCA32B91DA28003502BA /* MyBookmarkListViewModel.swift in Sources */, C5A201B42A986EC300A54381 /* EditPlaceInfoViewController.swift in Sources */, C51AED1D2A8A192D0015FBC2 /* ChangedViewAction+HomeViewController.swift in Sources */, + C5ED99452C088E000077B2F9 /* ReviewManagementRepository.swift in Sources */, C51B09BC2A82397800916BBD /* Marker+Extension.swift in Sources */, C53C54D22AD67E8800C3662A /* MarkerModelLocalDB.swift in Sources */, C58FBF922AC2D87300AB6EFC /* KakaoAPIManagerProtocol.swift in Sources */, @@ -2699,8 +3125,10 @@ C5C9619C2A8DB1D80016E2F8 /* MenuTypeLabel.swift in Sources */, C5476B6C2B304C8900F5FC6E /* ChallengeUserInfoView.swift in Sources */, C5351B7A2A1B439000116D50 /* KakaoCoordinateSearchDTO.swift in Sources */, + C5ED99372C088D360077B2F9 /* StoreManagementRepository.swift in Sources */, C5C290852A86173F00ED5DCE /* PlaceReviewWriteView.swift in Sources */, C51BBAD52A78D53D00BF5B7C /* AVIROCheckPlace+DTO.swift in Sources */, + C5ED996E2C0890CE0077B2F9 /* StoreInfoRepositoryInterface.swift in Sources */, C56857802A7113C600F52715 /* NormalTableViewCell.swift in Sources */, C549CDD82B9B538500CB6BF5 /* MyBookmarkCellModel.swift in Sources */, C5BA9DD42BE8B39B004FA06E /* RequestTable.swift in Sources */, @@ -2708,8 +3136,10 @@ C5C9619F2A8DEB230016E2F8 /* ReviewWriteButton.swift in Sources */, C5D3E15A2B9D887600DBB346 /* AVIROTabBarType.swift in Sources */, C5DCBC9A2B91D9E9003502BA /* MyPlaceListViewModel.swift in Sources */, + C5ED99682C088FE60077B2F9 /* StoreOperationHoursRepositoryInterface.swift in Sources */, C5E143A72AB43B8F007AC8C9 /* AVIROResult+DTO.swift in Sources */, C505C1E02B3ACCEC0058F115 /* AVIROMyChallengeLevelResult+DTO.swift in Sources */, + C5ED99492C088E1B0077B2F9 /* UserChallengeRepository.swift in Sources */, C5E430B52A5DAE9800CB67EC /* SecondRegistrationViewController.swift in Sources */, C593B64B2A4AEA9800D224CE /* AVIROReview+DTO.swift in Sources */, C5C90EB52AA6D80300AB3668 /* EditOperatingHourView.swift in Sources */, @@ -2720,6 +3150,8 @@ C5FF13572A42C8970026981D /* AVIROPlaceReviews+DTO.swift in Sources */, C541521D2AC125E100F39826 /* TutorialTopLabel.swift in Sources */, C5B071E52A59B4AC00AE709A /* RegistrationField.swift in Sources */, + C5ED99802C08930B0077B2F9 /* StoreUseCase.swift in Sources */, + C5ED99352C088D290077B2F9 /* StoreListRepository.swift in Sources */, C53893162A5EC0C500CB9A54 /* GenderButton.swift in Sources */, C505EB182ACC5AC50057A4F8 /* LaunchScreenViewController.swift in Sources */, C50F6AFD2A68FFCB00E942F5 /* EnrollMenuTableView.swift in Sources */, @@ -2727,17 +3159,20 @@ C5476B612B3028FA00F5FC6E /* ChallengeViewController.swift in Sources */, C5D3E15E2B9D890D00DBB346 /* AVIROTabBarSettingDelegate.swift in Sources */, C5A201C52A98A67900A54381 /* EditPhoneView.swift in Sources */, + C5ED99822C0893180077B2F9 /* BookmarkListUseCase.swift in Sources */, C5732C712A41739000CDC499 /* AVIROAPI.swift in Sources */, C54386792B3432FE00BD2CAF /* ViewModel.swift in Sources */, C50F6AF92A68FFBB00E942F5 /* EnrollStoreInfoView.swift in Sources */, C505C1DA2B3AC0070058F115 /* AVIROConfiguration.swift in Sources */, C5FD92F72A9CDB9300CF4673 /* EditMenuTopView.swift in Sources */, + C5ED994D2C088E2C0077B2F9 /* AppleAuthRepository.swift in Sources */, C56857822A7113CF00F52715 /* RequestTableViewCell.swift in Sources */, C52CD2DD2BCA5C310031671B /* BlurEffectView.swift in Sources */, C5C2907B2A85E51B00ED5DCE /* PlaceReviewsView.swift in Sources */, C5BA9DC92BE8AB8F004FA06E /* DataTransferService.swift in Sources */, C5A201BD2A98708800A54381 /* EditPlaceInfoPresenter.swift in Sources */, C59491D32AB0336100880B4B /* UIView(Animation)+Extension.swift in Sources */, + C5ED994B2C088E240077B2F9 /* UserInfoRepository.swift in Sources */, C5BA9E122BED223C004FA06E /* Coordinator.swift in Sources */, C5D3E15C2B9D88F200DBB346 /* AVIROTabBarInteractionDelegate.swift in Sources */, C51385502AAD921F001AB827 /* AVIROPlaceReportCheck+DTO.swift in Sources */, @@ -2751,6 +3186,7 @@ C51AED1F2A8B2BC80015FBC2 /* HomeTopButton.swift in Sources */, C5FA0EAC2A94DF39004AD8B4 /* ReportReviewPresenter.swift in Sources */, C5DCBCA12B91DA13003502BA /* MyCommentListViewController.swift in Sources */, + C5ED996C2C0890C30077B2F9 /* StoreMenuRepositoryInterface.swift in Sources */, C5A201B22A98502500A54381 /* TimeUtility.swift in Sources */, C56295092B31885C0067BBE5 /* ReviewWriteViewModel.swift in Sources */, C5476B6A2B304C8200F5FC6E /* ChallengeTitleView.swift in Sources */, diff --git a/AVIRO/App/AppController.swift b/AVIRO/App/AppController.swift index c5631302..7d72a2b9 100644 --- a/AVIRO/App/AppController.swift +++ b/AVIRO/App/AppController.swift @@ -31,7 +31,8 @@ final class AppController { self.window = window window.backgroundColor = .gray7 - checkState() + setTabBarView() +// checkState() } func setupLoginViewAfterLogout(in window: UIWindow, with type: LoginViewToastType) { diff --git a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift new file mode 100644 index 00000000..805cd796 --- /dev/null +++ b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift @@ -0,0 +1,8 @@ +// +// AppleAuthRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/AuthRepositories/AutoLoginRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/AutoLoginRepository.swift new file mode 100644 index 00000000..db0bfc9a --- /dev/null +++ b/AVIRO/Data/Repositories/AuthRepositories/AutoLoginRepository.swift @@ -0,0 +1,8 @@ +// +// AutoLoginRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/AuthRepositories/UserAccountRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/UserAccountRepository.swift new file mode 100644 index 00000000..54e2114a --- /dev/null +++ b/AVIRO/Data/Repositories/AuthRepositories/UserAccountRepository.swift @@ -0,0 +1,8 @@ +// +// UserAccountRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/BookmarkListRepositories/BookmarkListRepository.swift b/AVIRO/Data/Repositories/BookmarkListRepositories/BookmarkListRepository.swift new file mode 100644 index 00000000..3395f1b7 --- /dev/null +++ b/AVIRO/Data/Repositories/BookmarkListRepositories/BookmarkListRepository.swift @@ -0,0 +1,8 @@ +// +// BookmarkListRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/ChallengeRepositories/ChallengeInfoRepository.swift b/AVIRO/Data/Repositories/ChallengeRepositories/ChallengeInfoRepository.swift new file mode 100644 index 00000000..9a9a0f35 --- /dev/null +++ b/AVIRO/Data/Repositories/ChallengeRepositories/ChallengeInfoRepository.swift @@ -0,0 +1,8 @@ +// +// ChallengeInfoRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/ChallengeRepositories/UserChallengeRepository.swift b/AVIRO/Data/Repositories/ChallengeRepositories/UserChallengeRepository.swift new file mode 100644 index 00000000..6d1c31e8 --- /dev/null +++ b/AVIRO/Data/Repositories/ChallengeRepositories/UserChallengeRepository.swift @@ -0,0 +1,8 @@ +// +// UserChallengeRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/ReviewRepositories/ReviewManagementRepository.swift b/AVIRO/Data/Repositories/ReviewRepositories/ReviewManagementRepository.swift new file mode 100644 index 00000000..5be7bc66 --- /dev/null +++ b/AVIRO/Data/Repositories/ReviewRepositories/ReviewManagementRepository.swift @@ -0,0 +1,8 @@ +// +// ReviewManagementRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/StoreListRepositories/StoreListRepository.swift b/AVIRO/Data/Repositories/StoreListRepositories/StoreListRepository.swift new file mode 100644 index 00000000..e00fb446 --- /dev/null +++ b/AVIRO/Data/Repositories/StoreListRepositories/StoreListRepository.swift @@ -0,0 +1,8 @@ +// +// StoreListRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/StoreListRepositories/StoreManagementRepository.swift b/AVIRO/Data/Repositories/StoreListRepositories/StoreManagementRepository.swift new file mode 100644 index 00000000..df1d2c57 --- /dev/null +++ b/AVIRO/Data/Repositories/StoreListRepositories/StoreManagementRepository.swift @@ -0,0 +1,8 @@ +// +// StoreManagementRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/StoreRepositories/StoreInfoRepository.swift b/AVIRO/Data/Repositories/StoreRepositories/StoreInfoRepository.swift new file mode 100644 index 00000000..cc96e4a2 --- /dev/null +++ b/AVIRO/Data/Repositories/StoreRepositories/StoreInfoRepository.swift @@ -0,0 +1,8 @@ +// +// StoreInfoRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/StoreRepositories/StoreMenuRepository.swift b/AVIRO/Data/Repositories/StoreRepositories/StoreMenuRepository.swift new file mode 100644 index 00000000..2ba083cf --- /dev/null +++ b/AVIRO/Data/Repositories/StoreRepositories/StoreMenuRepository.swift @@ -0,0 +1,8 @@ +// +// StoreMenuRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/StoreRepositories/StoreOperationHoursRepository.swift b/AVIRO/Data/Repositories/StoreRepositories/StoreOperationHoursRepository.swift new file mode 100644 index 00000000..91ca3341 --- /dev/null +++ b/AVIRO/Data/Repositories/StoreRepositories/StoreOperationHoursRepository.swift @@ -0,0 +1,8 @@ +// +// StoreOperationHoursRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/StoreRepositories/StoreReviewRepository.swift b/AVIRO/Data/Repositories/StoreRepositories/StoreReviewRepository.swift new file mode 100644 index 00000000..14531c97 --- /dev/null +++ b/AVIRO/Data/Repositories/StoreRepositories/StoreReviewRepository.swift @@ -0,0 +1,8 @@ +// +// StoreReviewRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/StoreRepositories/StoreSummaryRepository.swift b/AVIRO/Data/Repositories/StoreRepositories/StoreSummaryRepository.swift new file mode 100644 index 00000000..30a02bd9 --- /dev/null +++ b/AVIRO/Data/Repositories/StoreRepositories/StoreSummaryRepository.swift @@ -0,0 +1,8 @@ +// +// StoreSummaryRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/UserInfoRepositories/UserInfoRepository.swift b/AVIRO/Data/Repositories/UserInfoRepositories/UserInfoRepository.swift new file mode 100644 index 00000000..9a268beb --- /dev/null +++ b/AVIRO/Data/Repositories/UserInfoRepositories/UserInfoRepository.swift @@ -0,0 +1,8 @@ +// +// UserInfoRepository.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AppleAuthRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AppleAuthRepositoryInterface.swift new file mode 100644 index 00000000..095da9fa --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AppleAuthRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// AppleAuthRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AutoLoginRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AutoLoginRepositoryInterface.swift new file mode 100644 index 00000000..43914861 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AutoLoginRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// AutoLoginRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/UserAccountRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/UserAccountRepositoryInterface.swift new file mode 100644 index 00000000..3dcbf6a9 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/UserAccountRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// UserAccountRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/BookmarkListRepositoryInterfaces/BookmarkListRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/BookmarkListRepositoryInterfaces/BookmarkListRepositoryInterface.swift new file mode 100644 index 00000000..fecee0b1 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/BookmarkListRepositoryInterfaces/BookmarkListRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// BookmarkListRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/ChallengeRepositoryInterfaces/ChallengeInfoRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/ChallengeRepositoryInterfaces/ChallengeInfoRepositoryInterface.swift new file mode 100644 index 00000000..c471face --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/ChallengeRepositoryInterfaces/ChallengeInfoRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// ChallengeInfoRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/ChallengeRepositoryInterfaces/UserChallengeRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/ChallengeRepositoryInterfaces/UserChallengeRepositoryInterface.swift new file mode 100644 index 00000000..7d2bacc1 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/ChallengeRepositoryInterfaces/UserChallengeRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// UserChallengeRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/ReviewRepositoryInterfaces/ReviewManagementRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/ReviewRepositoryInterfaces/ReviewManagementRepositoryInterface.swift new file mode 100644 index 00000000..b06f2e02 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/ReviewRepositoryInterfaces/ReviewManagementRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// ReviewManagementRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreInfoRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreInfoRepositoryInterface.swift new file mode 100644 index 00000000..4a48db08 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreInfoRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// StoreInfoRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreMenuRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreMenuRepositoryInterface.swift new file mode 100644 index 00000000..17d91e63 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreMenuRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// StoreMenuRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreOperationHoursRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreOperationHoursRepositoryInterface.swift new file mode 100644 index 00000000..357ff3bc --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreOperationHoursRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// StoreOperationHoursRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreReviewRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreReviewRepositoryInterface.swift new file mode 100644 index 00000000..afba471f --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreReviewRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// StoreReviewRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreSummaryRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreSummaryRepositoryInterface.swift new file mode 100644 index 00000000..f6917253 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/StoreRepositoryInterfaces/StoreSummaryRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// StoreSummaryRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/StoresRepositoryInterfaces/StoreListRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/StoresRepositoryInterfaces/StoreListRepositoryInterface.swift new file mode 100644 index 00000000..9ad5ee04 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/StoresRepositoryInterfaces/StoreListRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// StoreListRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/StoresRepositoryInterfaces/StoreManagementRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/StoresRepositoryInterfaces/StoreManagementRepositoryInterface.swift new file mode 100644 index 00000000..29c7a7d7 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/StoresRepositoryInterfaces/StoreManagementRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// StoreManagementRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/UserInfoRepositoryInterfaces/UserInfoRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/UserInfoRepositoryInterfaces/UserInfoRepositoryInterface.swift new file mode 100644 index 00000000..615b5de9 --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/UserInfoRepositoryInterfaces/UserInfoRepositoryInterface.swift @@ -0,0 +1,8 @@ +// +// UserInfoRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/UseCases/AuthUseCase.swift b/AVIRO/Domain/UseCases/AuthUseCase.swift new file mode 100644 index 00000000..d74032ed --- /dev/null +++ b/AVIRO/Domain/UseCases/AuthUseCase.swift @@ -0,0 +1,8 @@ +// +// AuthUseCase.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/UseCases/BookmarkListUseCase.swift b/AVIRO/Domain/UseCases/BookmarkListUseCase.swift new file mode 100644 index 00000000..3f5a531d --- /dev/null +++ b/AVIRO/Domain/UseCases/BookmarkListUseCase.swift @@ -0,0 +1,8 @@ +// +// BookmarkListUseCase.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/UseCases/ChallengeUseCase.swift b/AVIRO/Domain/UseCases/ChallengeUseCase.swift new file mode 100644 index 00000000..a5eb2189 --- /dev/null +++ b/AVIRO/Domain/UseCases/ChallengeUseCase.swift @@ -0,0 +1,8 @@ +// +// ChallengeUseCase.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/UseCases/ReviewUseCase.swift b/AVIRO/Domain/UseCases/ReviewUseCase.swift new file mode 100644 index 00000000..dd558868 --- /dev/null +++ b/AVIRO/Domain/UseCases/ReviewUseCase.swift @@ -0,0 +1,8 @@ +// +// ReviewUseCase.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/UseCases/StoreListUseCase.swift b/AVIRO/Domain/UseCases/StoreListUseCase.swift new file mode 100644 index 00000000..c1e2cd58 --- /dev/null +++ b/AVIRO/Domain/UseCases/StoreListUseCase.swift @@ -0,0 +1,8 @@ +// +// StoreListUseCase.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/UseCases/StoreUseCase.swift b/AVIRO/Domain/UseCases/StoreUseCase.swift new file mode 100644 index 00000000..e5d95199 --- /dev/null +++ b/AVIRO/Domain/UseCases/StoreUseCase.swift @@ -0,0 +1,8 @@ +// +// StoreUseCase.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation diff --git a/AVIRO/Domain/UseCases/UserInfoUseCase.swift b/AVIRO/Domain/UseCases/UserInfoUseCase.swift new file mode 100644 index 00000000..cbe270bd --- /dev/null +++ b/AVIRO/Domain/UseCases/UserInfoUseCase.swift @@ -0,0 +1,8 @@ +// +// UserInfoUseCase.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation From 1540dc0b37e026458fa07383ea44a784cc6408cd Mon Sep 17 00:00:00 2001 From: jeonseonghun Date: Sat, 15 Jun 2024 17:48:54 +0900 Subject: [PATCH 07/37] [Chore] --- AVIRO.xcodeproj/project.pbxproj | 8 ++++++++ .../ViewController/EditPlaceInfoViewController.swift | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 60f9888c..4f85a310 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -2419,6 +2419,7 @@ C5ED99332C088D0E0077B2F9 /* Targets */ = { isa = PBXGroup; children = ( + C5ED99952C0894860077B2F9 /* Auth */, ); path = Targets; sourceTree = ""; @@ -2613,6 +2614,13 @@ path = StoreList; sourceTree = ""; }; + C5ED99952C0894860077B2F9 /* Auth */ = { + isa = PBXGroup; + children = ( + ); + path = Auth; + sourceTree = ""; + }; C5FA0EA72A94D92B004AD8B4 /* Report */ = { isa = PBXGroup; children = ( diff --git a/AVIRO/Scene/Feature/Home/EditPlaceInfo/ViewController/EditPlaceInfoViewController.swift b/AVIRO/Scene/Feature/Home/EditPlaceInfo/ViewController/EditPlaceInfoViewController.swift index b29017af..36083715 100644 --- a/AVIRO/Scene/Feature/Home/EditPlaceInfo/ViewController/EditPlaceInfoViewController.swift +++ b/AVIRO/Scene/Feature/Home/EditPlaceInfo/ViewController/EditPlaceInfoViewController.swift @@ -498,7 +498,7 @@ extension EditPlaceInfoViewController: EditPlaceInfoProtocol { // MARK: Address가 봐뀐 후 메소드 presenter.afterChangedAddress = { [weak self] address in guard let address = address else { return } - + print(address) self?.presenter.isChangedFromPublicAddress = true self?.editLocationBottomView.changedAddressLabel(address) } From dbc1ddc74ad471c70452f95afc7d994b2bf5eb69 Mon Sep 17 00:00:00 2001 From: jeonseonghun Date: Sat, 15 Jun 2024 17:49:17 +0900 Subject: [PATCH 08/37] [Chore] --- .../ViewController/EditPlaceInfoViewController.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/AVIRO/Scene/Feature/Home/EditPlaceInfo/ViewController/EditPlaceInfoViewController.swift b/AVIRO/Scene/Feature/Home/EditPlaceInfo/ViewController/EditPlaceInfoViewController.swift index 36083715..0223bb56 100644 --- a/AVIRO/Scene/Feature/Home/EditPlaceInfo/ViewController/EditPlaceInfoViewController.swift +++ b/AVIRO/Scene/Feature/Home/EditPlaceInfo/ViewController/EditPlaceInfoViewController.swift @@ -498,7 +498,6 @@ extension EditPlaceInfoViewController: EditPlaceInfoProtocol { // MARK: Address가 봐뀐 후 메소드 presenter.afterChangedAddress = { [weak self] address in guard let address = address else { return } - print(address) self?.presenter.isChangedFromPublicAddress = true self?.editLocationBottomView.changedAddressLabel(address) } From 6144a04a3fa60a8ca0f1a0ba2b531014f652de19 Mon Sep 17 00:00:00 2001 From: jeonseonghun Date: Mon, 17 Jun 2024 15:49:38 +0900 Subject: [PATCH 09/37] [Chore]: Amplitude Version Update --- Podfile | 2 +- Podfile.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Podfile b/Podfile index c0355c8d..2de47bd5 100644 --- a/Podfile +++ b/Podfile @@ -11,7 +11,7 @@ pod 'KeychainSwift', '22.0.0' pod 'lottie-ios', '4.4.1' pod 'RealmSwift', '10.48.0' pod 'Toast-Swift', '5.1.0' -pod 'AmplitudeSwift', '1.4.4' +pod 'AmplitudeSwift', '1.4.5' pod 'RxSwift', '6.6.0' pod 'RxCocoa', '6.6.0' pod 'RxDataSources', '~> 5.0' diff --git a/Podfile.lock b/Podfile.lock index e00cbeeb..c71ab530 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - AmplitudeSwift (1.4.4): + - AmplitudeSwift (1.4.5): - AnalyticsConnector (~> 1.0.1) - AnalyticsConnector (1.0.3) - Differentiator (5.0.0) @@ -30,8 +30,8 @@ PODS: - Toast-Swift (5.1.0) DEPENDENCIES: - - AmplitudeSwift (= 1.4.4) - - KeychainSwift + - AmplitudeSwift + - KeychainSwift (= 22.0.0) - lottie-ios (= 4.4.1) - NMapsMap - RealmSwift (= 10.48.0) @@ -62,7 +62,7 @@ SPEC REPOS: - Toast-Swift SPEC CHECKSUMS: - AmplitudeSwift: 13725c3313c2e2cac30836dc2c973d3883baabef + AmplitudeSwift: 4daa595b157c73b9bc5f225f9b8faead90d044b3 AnalyticsConnector: a53214d38ae22734c6266106c0492b37832633a9 Differentiator: e8497ceab83c1b10ca233716d547b9af21b9344d KeychainSwift: 72f81155e1cb01c1bc4da296e4ce2cfcff556a12 @@ -79,6 +79,6 @@ SPEC CHECKSUMS: RxTest: a23f26bb53a5e146a0a69db4f0fa0b69001ce7f4 Toast-Swift: dd369e68ee529f542c65bd0d0c6c50cd743cf6f2 -PODFILE CHECKSUM: 52ae1d7225d731e6828cc877918e944eed0ac5c5 +PODFILE CHECKSUM: a2f3f0ba1b4d660a7513e99ed62976ad4a4df359 COCOAPODS: 1.15.2 From 1ca1d6565017badc94b907bf57c872196877cfb7 Mon Sep 17 00:00:00 2001 From: jeonseonghun Date: Mon, 17 Jun 2024 15:52:12 +0900 Subject: [PATCH 10/37] [Chore]: App version Update --- AVIRO.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index ad9f3eaf..fb245d11 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -2677,7 +2677,7 @@ CODE_SIGN_ENTITLEMENTS = AVIRO/AVIRO.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = C4K2HXA435; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = AVIRO/App/Info.plist; @@ -2714,7 +2714,7 @@ CODE_SIGN_ENTITLEMENTS = AVIRO/AVIRO.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = C4K2HXA435; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = AVIRO/App/Info.plist; From 2fc5b62eacc18385dc951498c55ce0b1906cc80a Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Fri, 28 Jun 2024 16:51:42 +0900 Subject: [PATCH 11/37] [Chore]: Pod Update --- Podfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index e00cbeeb..525fa811 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -31,7 +31,7 @@ PODS: DEPENDENCIES: - AmplitudeSwift (= 1.4.4) - - KeychainSwift + - KeychainSwift (= 22.0.0) - lottie-ios (= 4.4.1) - NMapsMap - RealmSwift (= 10.48.0) @@ -79,6 +79,6 @@ SPEC CHECKSUMS: RxTest: a23f26bb53a5e146a0a69db4f0fa0b69001ce7f4 Toast-Swift: dd369e68ee529f542c65bd0d0c6c50cd743cf6f2 -PODFILE CHECKSUM: 52ae1d7225d731e6828cc877918e944eed0ac5c5 +PODFILE CHECKSUM: d7acb359d780ecc882de8225b3248fc07f0f7276 COCOAPODS: 1.15.2 From 4dee7e608e994333fdc2fa43d15f8a583607eab5 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Fri, 28 Jun 2024 17:06:59 +0900 Subject: [PATCH 12/37] =?UTF-8?q?[Chore]:=20Assets=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/SpeechBubble1.imageset/Contents.json | 0 .../Assets/SpeechBubble1.imageset/SpeechBubble1.png | Bin .../SpeechBubble1.imageset/SpeechBubble1@2x.png | Bin .../SpeechBubble1.imageset/SpeechBubble1@3x.png | Bin .../Assets/SpeechBubble2.imageset/Contents.json | 0 .../Assets/SpeechBubble2.imageset/SpeechBubble2.png | Bin .../SpeechBubble2.imageset/SpeechBubble2@2x.png | Bin .../SpeechBubble2.imageset/SpeechBubble2@3x.png | Bin .../Assets/SpeechBubble3.imageset/Contents.json | 0 .../Assets/SpeechBubble3.imageset/SpeechBubble3.png | Bin .../SpeechBubble3.imageset/SpeechBubble3@2x.png | Bin .../SpeechBubble3.imageset/SpeechBubble3@3x.png | Bin .../All_Clicked_Fav.imageset/All_Clicked_Fav.png | Bin .../All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png | Bin .../All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png | Bin .../Icon_2.0/All_Clicked_Fav.imageset/Contents.json | 0 .../All_Default_Fav.imageset/All_Default_Fav.png | Bin .../All_Default_Fav.imageset/All_Default_Fav@2x.png | Bin .../All_Default_Fav.imageset/All_Default_Fav@3x.png | Bin .../Icon_2.0/All_Default_Fav.imageset/Contents.json | 0 .../Request_Clicked_Fav.imageset/Contents.json | 0 .../Request_Clicked_Fav.png | Bin .../Request_Clicked_Fav@2x.png | Bin .../Request_Clicked_Fav@3x.png | Bin .../Request_Default_Fav.imageset/Contents.json | 0 .../Request_Default_Fav.png | Bin .../Request_Default_Fav@2x.png | Bin .../Request_Default_Fav@3x.png | Bin .../Some_Clicked_Fav.imageset/Contents.json | 0 .../Some_Clicked_Fav.imageset/Some_Clicked_Fav.png | Bin .../Some_Clicked_Fav@2x.png | Bin .../Some_Clicked_Fav@3x.png | Bin .../Some_Default_Fav.imageset/Contents.json | 0 .../Some_Default_Fav.imageset/Some_Default_Fav.png | Bin .../Some_Default_Fav@2x.png | Bin .../Some_Default_Fav@3x.png | Bin 36 files changed, 0 insertions(+), 0 deletions(-) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@3x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Contents.json (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@2x.png (100%) rename AVIRO/{App => Resources}/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@3x.png (100%) diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble1.imageset/SpeechBubble1@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble2.imageset/SpeechBubble2@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SpeechBubble3.imageset/SpeechBubble3@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@3x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Contents.json diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@2x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@2x.png diff --git a/AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@3x.png similarity index 100% rename from AVIRO/App/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@3x.png From a88ca7d33a67983a8382adbf9371eb6d92626c89 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Sat, 29 Jun 2024 00:53:36 +0900 Subject: [PATCH 13/37] =?UTF-8?q?[Feat]:=20Social=20Login=20Domain=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20CFont=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 39 ++++++++------- AVIRO/Custom/Constants/UIFont+Extension.swift | 41 ---------------- .../Custom/Extension/UIButton+Extension.swift | 2 +- .../UIViewController+Extension.swift | 2 +- .../SubClass/UIButton/CategoryButton.swift | 2 +- .../SubClass/UIButton/GenderButton.swift | 4 +- .../SubClass/UIButton/MenuPlusButton.swift | 2 +- .../UIButton/MyPage/EditNickNameButton.swift | 2 +- .../UIButton/MyPage/NoListButton.swift | 3 +- .../SubClass/UIButton/NextPageButton.swift | 4 +- .../UIButton/PlaceView/EditInfoButton.swift | 2 +- .../PlaceView/ReviewWriteButton.swift | 2 +- .../UIButton/PlaceView/ShowMoreButton.swift | 2 +- .../SubClass/UIButton/VeganOptionButton.swift | 2 +- .../UnderlineSegmentedControl.swift | 4 +- .../SubClass/UITextField/EnrollField.swift | 2 +- .../SubClass/UITextField/MainField.swift | 2 +- .../SubClass/UITextField/MenuField.swift | 2 +- .../UITextField/RegistrationField.swift | 2 +- .../SubClass/UITextField/SearchField.swift | 2 +- .../SubClass/UITextLabel/NoResultLabel.swift | 2 +- .../UITextLabel/PlaceView/MenuTypeLabel.swift | 2 +- .../UITextLabel/TutorialTopLabel.swift | 2 +- AVIRO/Custom/Utility/AmplitudeUtility.swift | 2 +- AVIRO/Domain/Entities/User/LoginInfo.swift | 21 ++++++++ .../AppleAuthRepositoryInterface.swift | 8 ---- .../AutoLoginRepositoryInterface.swift | 8 ---- .../SocialLoginRepositoryInterface.swift | 16 +++++++ .../UserAccountRepositoryInterface.swift | 0 AVIRO/Domain/UseCases/AuthUseCase.swift | 8 ---- .../Domain/UseCases/SocialLoginUseCase.swift | 48 +++++++++++++++++++ .../HeaderView/HistoryHeaderView.swift | 4 +- .../HeaderView/PlaceListHeaderView.swift | 4 +- .../SubView/HistoryTableViewCell.swift | 2 +- .../SubView/HomeSearchViewTableViewCell.swift | 6 +-- .../SubView/NoHistoryLabelView.swift | 4 +- .../OperationHourView.swift | 19 ++++---- .../OperationHoursView.swift | 2 +- .../SubView/PlaceSummaryView.swift | 8 ++-- .../SubView/PlaceInfoView.swift | 16 +++---- .../FinalRegistrationViewController.swift | 2 +- .../FirstRegistrationViewController.swift | 8 ++-- .../SecondRegistrationViewController.swift | 8 ++-- .../ViewController/TermsTableCell.swift | 2 +- .../ThridRegistrationViewController.swift | 6 +-- .../ViewController/LoginViewController.swift | 6 +-- .../Tutorial/TutorialCell/TopCell.swift | 4 +- 47 files changed, 183 insertions(+), 158 deletions(-) create mode 100644 AVIRO/Domain/Entities/User/LoginInfo.swift delete mode 100644 AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AppleAuthRepositoryInterface.swift delete mode 100644 AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AutoLoginRepositoryInterface.swift create mode 100644 AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift rename AVIRO/Domain/RepositoryInterfaces/{AuthRepositoryInterfaces => SocialLoginRepositoryInterfaces}/UserAccountRepositoryInterface.swift (100%) delete mode 100644 AVIRO/Domain/UseCases/AuthUseCase.swift create mode 100644 AVIRO/Domain/UseCases/SocialLoginUseCase.swift diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 9ff8ff49..b935bb5a 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -95,6 +95,7 @@ C52FA3472A175B20005E70DC /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C52FA3462A175B20005E70DC /* HomeViewController.swift */; }; C52FA34C2A175B20005E70DC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C52FA34B2A175B20005E70DC /* Assets.xcassets */; }; C52FA34F2A175B20005E70DC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C52FA34D2A175B20005E70DC /* LaunchScreen.storyboard */; }; + C534B14E2C2EABE900C62FDA /* LoginInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C534B14D2C2EABE900C62FDA /* LoginInfo.swift */; }; C5351B4D2A19223300116D50 /* KakaoMapRequestAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5351B4C2A19223300116D50 /* KakaoMapRequestAPI.swift */; }; C5351B502A19225A00116D50 /* KakaoKeywordPlace+DTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5351B4F2A19225A00116D50 /* KakaoKeywordPlace+DTO.swift */; }; C5351B542A19A7B100116D50 /* UserCoordinate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5351B532A19A7B100116D50 /* UserCoordinate.swift */; }; @@ -282,13 +283,11 @@ C5ED994D2C088E2C0077B2F9 /* AppleAuthRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED994C2C088E2C0077B2F9 /* AppleAuthRepository.swift */; }; C5ED994F2C088E340077B2F9 /* AutoLoginRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED994E2C088E340077B2F9 /* AutoLoginRepository.swift */; }; C5ED99512C088E3E0077B2F9 /* UserAccountRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99502C088E3E0077B2F9 /* UserAccountRepository.swift */; }; - C5ED995A2C088EE30077B2F9 /* AppleAuthRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99592C088EE30077B2F9 /* AppleAuthRepositoryInterface.swift */; }; - C5ED995C2C088EEF0077B2F9 /* AutoLoginRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED995B2C088EEF0077B2F9 /* AutoLoginRepositoryInterface.swift */; }; + C5ED995A2C088EE30077B2F9 /* SocialLoginRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99592C088EE30077B2F9 /* SocialLoginRepositoryInterface.swift */; }; C5ED995E2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED995D2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift */; }; C5ED99602C088FAA0077B2F9 /* UserInfoRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED995F2C088FAA0077B2F9 /* UserInfoRepositoryInterface.swift */; }; C5ED99622C088FB50077B2F9 /* UserChallengeRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99612C088FB50077B2F9 /* UserChallengeRepositoryInterface.swift */; }; C5ED99642C088FC10077B2F9 /* ChallengeInfoRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99632C088FC10077B2F9 /* ChallengeInfoRepositoryInterface.swift */; }; - C5ED99662C088FD30077B2F9 /* ReviewManagementRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99652C088FD30077B2F9 /* ReviewManagementRepositoryInterface.swift */; }; C5ED99682C088FE60077B2F9 /* StoreOperationHoursRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99672C088FE60077B2F9 /* StoreOperationHoursRepositoryInterface.swift */; }; C5ED996A2C0890B30077B2F9 /* StoreReviewRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99692C0890B30077B2F9 /* StoreReviewRepositoryInterface.swift */; }; C5ED996C2C0890C30077B2F9 /* StoreMenuRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED996B2C0890C30077B2F9 /* StoreMenuRepositoryInterface.swift */; }; @@ -297,7 +296,7 @@ C5ED99722C0891FC0077B2F9 /* BookmarkListRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99712C0891FC0077B2F9 /* BookmarkListRepositoryInterface.swift */; }; C5ED99742C0892060077B2F9 /* StoreListRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99732C0892060077B2F9 /* StoreListRepositoryInterface.swift */; }; C5ED99762C0892170077B2F9 /* StoreManagementRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99752C0892170077B2F9 /* StoreManagementRepositoryInterface.swift */; }; - C5ED99782C0892C70077B2F9 /* AuthUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99772C0892C70077B2F9 /* AuthUseCase.swift */; }; + C5ED99782C0892C70077B2F9 /* SocialLoginUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99772C0892C70077B2F9 /* SocialLoginUseCase.swift */; }; C5ED997A2C0892CF0077B2F9 /* UserInfoUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99792C0892CF0077B2F9 /* UserInfoUseCase.swift */; }; C5ED997C2C0892D90077B2F9 /* ChallengeUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED997B2C0892D90077B2F9 /* ChallengeUseCase.swift */; }; C5ED997E2C0892F80077B2F9 /* ReviewUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED997D2C0892F80077B2F9 /* ReviewUseCase.swift */; }; @@ -428,6 +427,7 @@ C52FA3462A175B20005E70DC /* HomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; C52FA34B2A175B20005E70DC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; C52FA3502A175B20005E70DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C534B14D2C2EABE900C62FDA /* LoginInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginInfo.swift; sourceTree = ""; }; C5351B4A2A1919F700116D50 /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = ""; }; C5351B4C2A19223300116D50 /* KakaoMapRequestAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KakaoMapRequestAPI.swift; sourceTree = ""; }; C5351B4F2A19225A00116D50 /* KakaoKeywordPlace+DTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KakaoKeywordPlace+DTO.swift"; sourceTree = ""; }; @@ -619,8 +619,7 @@ C5ED994C2C088E2C0077B2F9 /* AppleAuthRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleAuthRepository.swift; sourceTree = ""; }; C5ED994E2C088E340077B2F9 /* AutoLoginRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoLoginRepository.swift; sourceTree = ""; }; C5ED99502C088E3E0077B2F9 /* UserAccountRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAccountRepository.swift; sourceTree = ""; }; - C5ED99592C088EE30077B2F9 /* AppleAuthRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleAuthRepositoryInterface.swift; sourceTree = ""; }; - C5ED995B2C088EEF0077B2F9 /* AutoLoginRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoLoginRepositoryInterface.swift; sourceTree = ""; }; + C5ED99592C088EE30077B2F9 /* SocialLoginRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialLoginRepositoryInterface.swift; sourceTree = ""; }; C5ED995D2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAccountRepositoryInterface.swift; sourceTree = ""; }; C5ED995F2C088FAA0077B2F9 /* UserInfoRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoRepositoryInterface.swift; sourceTree = ""; }; C5ED99612C088FB50077B2F9 /* UserChallengeRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserChallengeRepositoryInterface.swift; sourceTree = ""; }; @@ -634,7 +633,7 @@ C5ED99712C0891FC0077B2F9 /* BookmarkListRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkListRepositoryInterface.swift; sourceTree = ""; }; C5ED99732C0892060077B2F9 /* StoreListRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreListRepositoryInterface.swift; sourceTree = ""; }; C5ED99752C0892170077B2F9 /* StoreManagementRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreManagementRepositoryInterface.swift; sourceTree = ""; }; - C5ED99772C0892C70077B2F9 /* AuthUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthUseCase.swift; sourceTree = ""; }; + C5ED99772C0892C70077B2F9 /* SocialLoginUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialLoginUseCase.swift; sourceTree = ""; }; C5ED99792C0892CF0077B2F9 /* UserInfoUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoUseCase.swift; sourceTree = ""; }; C5ED997B2C0892D90077B2F9 /* ChallengeUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChallengeUseCase.swift; sourceTree = ""; }; C5ED997D2C0892F80077B2F9 /* ReviewUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReviewUseCase.swift; sourceTree = ""; }; @@ -1040,6 +1039,14 @@ path = AVIRO; sourceTree = ""; }; + C534B14C2C2EABD300C62FDA /* User */ = { + isa = PBXGroup; + children = ( + C534B14D2C2EABE900C62FDA /* LoginInfo.swift */, + ); + path = User; + sourceTree = ""; + }; C5351B4E2A19223600116D50 /* KakaoMapManager */ = { isa = PBXGroup; children = ( @@ -1915,7 +1922,7 @@ C5ED997D2C0892F80077B2F9 /* ReviewUseCase.swift */, C5ED997B2C0892D90077B2F9 /* ChallengeUseCase.swift */, C5ED99792C0892CF0077B2F9 /* UserInfoUseCase.swift */, - C5ED99772C0892C70077B2F9 /* AuthUseCase.swift */, + C5ED99772C0892C70077B2F9 /* SocialLoginUseCase.swift */, ); path = UseCases; sourceTree = ""; @@ -1929,7 +1936,7 @@ C5ED99552C088E9D0077B2F9 /* ReviewRepositoryInterfaces */, C5ED99542C088E950077B2F9 /* ChallengeRepositoryInterfaces */, C5ED99532C088E880077B2F9 /* UserInfoRepositoryInterfaces */, - C5ED99522C088E690077B2F9 /* AuthRepositoryInterfaces */, + C5ED99522C088E690077B2F9 /* SocialLoginRepositoryInterfaces */, ); path = RepositoryInterfaces; sourceTree = ""; @@ -1937,6 +1944,7 @@ C5BA9E072BED1CF8004FA06E /* Entities */ = { isa = PBXGroup; children = ( + C534B14C2C2EABD300C62FDA /* User */, ); path = Entities; sourceTree = ""; @@ -2427,14 +2435,13 @@ path = Targets; sourceTree = ""; }; - C5ED99522C088E690077B2F9 /* AuthRepositoryInterfaces */ = { + C5ED99522C088E690077B2F9 /* SocialLoginRepositoryInterfaces */ = { isa = PBXGroup; children = ( - C5ED99592C088EE30077B2F9 /* AppleAuthRepositoryInterface.swift */, - C5ED995B2C088EEF0077B2F9 /* AutoLoginRepositoryInterface.swift */, + C5ED99592C088EE30077B2F9 /* SocialLoginRepositoryInterface.swift */, C5ED995D2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift */, ); - path = AuthRepositoryInterfaces; + path = SocialLoginRepositoryInterfaces; sourceTree = ""; }; C5ED99532C088E880077B2F9 /* UserInfoRepositoryInterfaces */ = { @@ -2942,7 +2949,6 @@ C5F1014F2A6D19A800C53286 /* VeganOptionButton.swift in Sources */, C505C1DD2B3ACCC40058F115 /* AVIROChallengeInfoResult+DTO.swift in Sources */, C52066292A7CD5FC0038ECCD /* HistoryTableModel.swift in Sources */, - C5ED995C2C088EEF0077B2F9 /* AutoLoginRepositoryInterface.swift in Sources */, C5FD92EB2A9C786600CF4673 /* PublicAPIRequestComponents.swift in Sources */, C58C49C82AC9B67600DE04B7 /* AppleUserLoginModel.swift in Sources */, C5BA9E172BED2585004FA06E /* printIfDebug.swift in Sources */, @@ -2969,7 +2975,7 @@ C5ED99512C088E3E0077B2F9 /* UserAccountRepository.swift in Sources */, C51000382AB5F3BD00F65C1F /* UIFont+Extension.swift in Sources */, C56295072B3188530067BBE5 /* ReviewWriteViewController.swift in Sources */, - C5ED995A2C088EE30077B2F9 /* AppleAuthRepositoryInterface.swift in Sources */, + C5ED995A2C088EE30077B2F9 /* SocialLoginRepositoryInterface.swift in Sources */, C5476B7B2B31516000F5FC6E /* LicenseDetailViewController.swift in Sources */, C5FBDA602B398280007AC77E /* ChallengeInfoOrangeView.swift in Sources */, C5FA0EAA2A94DB3E004AD8B4 /* ReportReviewViewController.swift in Sources */, @@ -3023,7 +3029,7 @@ C50F6AF32A68FD0A00E942F5 /* EnrollPlaceViewController.swift in Sources */, C5ED99472C088E0F0077B2F9 /* ChallengeInfoRepository.swift in Sources */, C5732C7E2A41D42700CDC499 /* RequestTableFieldModel.swift in Sources */, - C5ED99782C0892C70077B2F9 /* AuthUseCase.swift in Sources */, + C5ED99782C0892C70077B2F9 /* SocialLoginUseCase.swift in Sources */, C5C961982A8DA5880016E2F8 /* EditInfoButton.swift in Sources */, C5476B682B303BE800F5FC6E /* MyInfoView.swift in Sources */, C5A989972A959D920021B7C3 /* AVIROUpdateBookmark+DTO.swift in Sources */, @@ -3127,6 +3133,7 @@ C51AED1D2A8A192D0015FBC2 /* ChangedViewAction+HomeViewController.swift in Sources */, C5ED99452C088E000077B2F9 /* ReviewManagementRepository.swift in Sources */, C51B09BC2A82397800916BBD /* Marker+Extension.swift in Sources */, + C534B14E2C2EABE900C62FDA /* LoginInfo.swift in Sources */, C53C54D22AD67E8800C3662A /* MarkerModelLocalDB.swift in Sources */, C58FBF922AC2D87300AB6EFC /* KakaoAPIManagerProtocol.swift in Sources */, C528E4BE2A5FB816002BD72E /* TermsTableCell.swift in Sources */, diff --git a/AVIRO/Custom/Constants/UIFont+Extension.swift b/AVIRO/Custom/Constants/UIFont+Extension.swift index 513d5d59..c7ec1084 100644 --- a/AVIRO/Custom/Constants/UIFont+Extension.swift +++ b/AVIRO/Custom/Constants/UIFont+Extension.swift @@ -7,46 +7,6 @@ import UIKit -/// **Pretendard 폰트 적용을 위한 Class입니다.** -final class CFont { - static let font = CFont() - - private(set) var regular13: UIFont = .pretendard(size: 13, weight: .regular) - private(set) var regular14: UIFont = .pretendard(size: 14, weight: .regular) - private(set) var regular15: UIFont = .pretendard(size: 15, weight: .regular) - private(set) var regular17: UIFont = .pretendard(size: 17, weight: .regular) - - private(set) var medium11: UIFont = .pretendard(size: 11, weight: .medium) - private(set) var medium14: UIFont = .pretendard(size: 14, weight: .medium) - private(set) var medium15: UIFont = .pretendard(size: 15, weight: .medium) - private(set) var medium16: UIFont = .pretendard(size: 16, weight: .medium) - private(set) var medium17: UIFont = .pretendard(size: 17, weight: .medium) - private(set) var medium18: UIFont = .pretendard(size: 18, weight: .medium) - private(set) var medium45: UIFont = .pretendard(size: 45, weight: .medium) - - private(set) var semibold11: UIFont = .pretendard(size: 11, weight: .semibold) - private(set) var semibold14: UIFont = .pretendard(size: 14, weight: .semibold) - private(set) var semibold15: UIFont = .pretendard(size: 15, weight: .semibold) - private(set) var semibold16: UIFont = .pretendard(size: 16, weight: .semibold) - private(set) var semibold17: UIFont = .pretendard(size: 17, weight: .semibold) - private(set) var semibold18: UIFont = .pretendard(size: 18, weight: .semibold) - private(set) var semibold20: UIFont = .pretendard(size: 20, weight: .semibold) - private(set) var semibold31: UIFont = .pretendard(size: 31, weight: .semibold) - - private(set) var bold11: UIFont = .pretendard(size: 11, weight: .bold) - private(set) var bold15: UIFont = .pretendard(size: 15, weight: .bold) - private(set) var bold16: UIFont = .pretendard(size: 16, weight: .bold) - private(set) var bold20: UIFont = .pretendard(size: 20, weight: .bold) - private(set) var bold24: UIFont = .pretendard(size: 24, weight: .bold) - - private(set) var heavy17: UIFont = .pretendard(size: 17, weight: .heavy) - private(set) var heavy24: UIFont = .pretendard(size: 24, weight: .heavy) - private(set) var heavy31: UIFont = .pretendard(size: 31, weight: .heavy) - private(set) var heavy45: UIFont = - .pretendard(size: 45, weight: .heavy) - init() {} -} - extension UIFont { static func pretendard(size fontSize: CGFloat, weight: UIFont.Weight) -> UIFont { let familyName = "Pretendard" @@ -78,5 +38,4 @@ extension UIFont { return UIFont(name: "\(familyName)-\(weightString)", size: fontSize) ?? .systemFont(ofSize: fontSize, weight: weight) } - } diff --git a/AVIRO/Custom/Extension/UIButton+Extension.swift b/AVIRO/Custom/Extension/UIButton+Extension.swift index d194051a..eb60b18e 100644 --- a/AVIRO/Custom/Extension/UIButton+Extension.swift +++ b/AVIRO/Custom/Extension/UIButton+Extension.swift @@ -20,7 +20,7 @@ extension UIButton { with: rect, options: .usesLineFragmentOrigin, attributes: [ - NSAttributedString.Key.font: titleLabel?.font ?? CFont.font.medium16 + NSAttributedString.Key.font: titleLabel?.font ?? .pretendard(size: 16, weight: .medium) ], context: nil ) diff --git a/AVIRO/Custom/Extension/UIViewController+Extension.swift b/AVIRO/Custom/Extension/UIViewController+Extension.swift index 436056b0..4fce6af1 100644 --- a/AVIRO/Custom/Extension/UIViewController+Extension.swift +++ b/AVIRO/Custom/Extension/UIViewController+Extension.swift @@ -116,7 +116,7 @@ extension UIViewController { style.cornerRadius = 14 style.backgroundColor = .gray3.withAlphaComponent(0.9) style.titleColor = .gray6 - style.titleFont = CFont.font.medium17 + style.titleFont = .pretendard(size: 17, weight: .medium) self.view.makeToast( title, diff --git a/AVIRO/Custom/SubClass/UIButton/CategoryButton.swift b/AVIRO/Custom/SubClass/UIButton/CategoryButton.swift index 2842e65e..2391249f 100644 --- a/AVIRO/Custom/SubClass/UIButton/CategoryButton.swift +++ b/AVIRO/Custom/SubClass/UIButton/CategoryButton.swift @@ -18,7 +18,7 @@ final class CategoryButton: UIButton { func setButton(_ title: String) { let attributes: [NSAttributedString.Key: Any] = [ - .font: CFont.font.medium16, + .font: UIFont.pretendard(size: 16, weight: .medium), .foregroundColor: UIColor.gray0 ] diff --git a/AVIRO/Custom/SubClass/UIButton/GenderButton.swift b/AVIRO/Custom/SubClass/UIButton/GenderButton.swift index 03da8657..4a47569f 100644 --- a/AVIRO/Custom/SubClass/UIButton/GenderButton.swift +++ b/AVIRO/Custom/SubClass/UIButton/GenderButton.swift @@ -34,7 +34,7 @@ final class GenderButton: UIButton { } let attributes: [NSAttributedString.Key: Any] = [ - .font: CFont.font.semibold16, + .font: UIFont.pretendard(size: 16, weight: .semibold), .foregroundColor: UIColor.gray3 ] @@ -46,7 +46,7 @@ final class GenderButton: UIButton { setAttributedTitle(attributedTitle, for: state) let selectedAttribute: [NSAttributedString.Key: Any] = [ - .font: CFont.font.semibold16, + .font: UIFont.pretendard(size: 16, weight: .semibold), .foregroundColor: UIColor.gray7 ] diff --git a/AVIRO/Custom/SubClass/UIButton/MenuPlusButton.swift b/AVIRO/Custom/SubClass/UIButton/MenuPlusButton.swift index 2e70764a..89c2e707 100644 --- a/AVIRO/Custom/SubClass/UIButton/MenuPlusButton.swift +++ b/AVIRO/Custom/SubClass/UIButton/MenuPlusButton.swift @@ -30,7 +30,7 @@ final class MenuPlusButton: UIButton { _ image: UIImage? = UIImage.plus.withTintColor(.main) ) { let attributes: [NSAttributedString.Key: Any] = [ - .font: CFont.font.semibold16, + .font: UIFont.pretendard(size: 16, weight: .semibold), .foregroundColor: UIColor.main ] diff --git a/AVIRO/Custom/SubClass/UIButton/MyPage/EditNickNameButton.swift b/AVIRO/Custom/SubClass/UIButton/MyPage/EditNickNameButton.swift index 45758b5e..3b36956a 100644 --- a/AVIRO/Custom/SubClass/UIButton/MyPage/EditNickNameButton.swift +++ b/AVIRO/Custom/SubClass/UIButton/MyPage/EditNickNameButton.swift @@ -19,7 +19,7 @@ final class EditNickNameButton: UIButton { func makeButton(_ text: String ) { self.setTitle(text, for: .normal) self.setImage(UIImage.smallPushView, for: .normal) - self.titleLabel?.font = CFont.font.regular14 + self.titleLabel?.font = .pretendard(size: 14, weight: .regular) self.setTitleColor(.gray2, for: .normal) self.semanticContentAttribute = .forceRightToLeft diff --git a/AVIRO/Custom/SubClass/UIButton/MyPage/NoListButton.swift b/AVIRO/Custom/SubClass/UIButton/MyPage/NoListButton.swift index 9d3855d8..be932912 100644 --- a/AVIRO/Custom/SubClass/UIButton/MyPage/NoListButton.swift +++ b/AVIRO/Custom/SubClass/UIButton/MyPage/NoListButton.swift @@ -33,8 +33,7 @@ final class NoListButton: UIButton { setImage(image, for: .normal) setTitleColor(.keywordBlue, for: .normal) - titleLabel?.font = CFont.font.semibold16 - + titleLabel?.font = .pretendard(size: 16, weight: .semibold) semanticContentAttribute = .forceLeftToRight imageEdgeInsets = .init( diff --git a/AVIRO/Custom/SubClass/UIButton/NextPageButton.swift b/AVIRO/Custom/SubClass/UIButton/NextPageButton.swift index 617133b9..199ca915 100644 --- a/AVIRO/Custom/SubClass/UIButton/NextPageButton.swift +++ b/AVIRO/Custom/SubClass/UIButton/NextPageButton.swift @@ -28,12 +28,12 @@ final class NextPageButton: UIButton { } let enabledAttributes: [NSAttributedString.Key: Any] = [ - .font: CFont.font.semibold18, + .font: UIFont.pretendard(size: 18, weight: .semibold), .foregroundColor: UIColor.gray7 ] let disenabledAttributes: [NSAttributedString.Key: Any] = [ - .font: CFont.font.semibold18, + .font: UIFont.pretendard(size: 18, weight: .semibold), .foregroundColor: UIColor.gray2 ] diff --git a/AVIRO/Custom/SubClass/UIButton/PlaceView/EditInfoButton.swift b/AVIRO/Custom/SubClass/UIButton/PlaceView/EditInfoButton.swift index a2c14608..65e5d122 100644 --- a/AVIRO/Custom/SubClass/UIButton/PlaceView/EditInfoButton.swift +++ b/AVIRO/Custom/SubClass/UIButton/PlaceView/EditInfoButton.swift @@ -20,7 +20,7 @@ final class EditInfoButton: UIButton { func setButton(_ title: String) { self.setTitle(title, for: .normal) self.setTitleColor(.keywordBlue, for: .normal) - self.titleLabel?.font = CFont.font.medium14 + self.titleLabel?.font = .pretendard(size: 14, weight: .medium) self.setImage( UIImage.editInfo.withRenderingMode(.alwaysTemplate), diff --git a/AVIRO/Custom/SubClass/UIButton/PlaceView/ReviewWriteButton.swift b/AVIRO/Custom/SubClass/UIButton/PlaceView/ReviewWriteButton.swift index 0705db92..3e2878ac 100644 --- a/AVIRO/Custom/SubClass/UIButton/PlaceView/ReviewWriteButton.swift +++ b/AVIRO/Custom/SubClass/UIButton/PlaceView/ReviewWriteButton.swift @@ -33,7 +33,7 @@ final class ReviewWriteButton: UIButton { setImage(image?.withTintColor(.gray7), for: .normal) setTitleColor(.gray7, for: .normal) - titleLabel?.font = CFont.font.semibold16 + titleLabel?.font = .pretendard(size: 16, weight: .semibold) semanticContentAttribute = .forceLeftToRight diff --git a/AVIRO/Custom/SubClass/UIButton/PlaceView/ShowMoreButton.swift b/AVIRO/Custom/SubClass/UIButton/PlaceView/ShowMoreButton.swift index 4fdca28d..b7745c9b 100644 --- a/AVIRO/Custom/SubClass/UIButton/PlaceView/ShowMoreButton.swift +++ b/AVIRO/Custom/SubClass/UIButton/PlaceView/ShowMoreButton.swift @@ -22,7 +22,7 @@ final class ShowMoreButton: UIButton { self.setTitle(title, for: .normal) self.setTitleColor(.gray2, for: .normal) - self.titleLabel?.font = CFont.font.medium14 + self.titleLabel?.font = .pretendard(size: 14, weight: .medium) self.setImage(UIImage(named: "More"), for: .normal) diff --git a/AVIRO/Custom/SubClass/UIButton/VeganOptionButton.swift b/AVIRO/Custom/SubClass/UIButton/VeganOptionButton.swift index a9362bde..98950506 100644 --- a/AVIRO/Custom/SubClass/UIButton/VeganOptionButton.swift +++ b/AVIRO/Custom/SubClass/UIButton/VeganOptionButton.swift @@ -101,7 +101,7 @@ final class VeganOptionButton: UIButton { setAttributedTitle(attributedStringSelected, for: .selected) - titleLabel?.font = CFont.font.bold15 + titleLabel?.font = .pretendard(size: 15, weight: .bold) titleLabel?.numberOfLines = 2 tintColor = .gray2 diff --git a/AVIRO/Custom/SubClass/UISegmentedControl/UnderlineSegmentedControl.swift b/AVIRO/Custom/SubClass/UISegmentedControl/UnderlineSegmentedControl.swift index 126622d4..7955bdd0 100644 --- a/AVIRO/Custom/SubClass/UISegmentedControl/UnderlineSegmentedControl.swift +++ b/AVIRO/Custom/SubClass/UISegmentedControl/UnderlineSegmentedControl.swift @@ -107,11 +107,11 @@ final class UnderlineSegmentedControl: UISegmentedControl { func setAttributedTitle( _ normal: (UIColor?, UIFont) = ( UIColor.gray2, - CFont.font.regular17 + .pretendard(size: 17, weight: .regular) ), _ selected: (UIColor?, UIFont) = ( UIColor.gray0, - CFont.font.semibold17 + .pretendard(size: 17, weight: .semibold) ) ) { guard let normalColor = normal.0 else { return } diff --git a/AVIRO/Custom/SubClass/UITextField/EnrollField.swift b/AVIRO/Custom/SubClass/UITextField/EnrollField.swift index 8d0eb2e0..bf5c8c3c 100644 --- a/AVIRO/Custom/SubClass/UITextField/EnrollField.swift +++ b/AVIRO/Custom/SubClass/UITextField/EnrollField.swift @@ -55,7 +55,7 @@ class EnrollField: UITextField { private func configuration() { self.textColor = .gray0 - self.font = CFont.font.medium16 + self.font = .pretendard(size: 16, weight: .medium) self.backgroundColor = .gray6 self.layer.cornerRadius = 10 } diff --git a/AVIRO/Custom/SubClass/UITextField/MainField.swift b/AVIRO/Custom/SubClass/UITextField/MainField.swift index 86e6a864..23358ba1 100644 --- a/AVIRO/Custom/SubClass/UITextField/MainField.swift +++ b/AVIRO/Custom/SubClass/UITextField/MainField.swift @@ -104,7 +104,7 @@ class MainField: UITextField { self.layer.shadowOffset = CGSize(width: 2, height: 2) self.textColor = .gray0 - self.font = CFont.font.medium18 + self.font = .pretendard(size: 18, weight: .medium) self.backgroundColor = .gray7 self.layer.cornerRadius = 10 } diff --git a/AVIRO/Custom/SubClass/UITextField/MenuField.swift b/AVIRO/Custom/SubClass/UITextField/MenuField.swift index 0b050cd4..be94fc6a 100644 --- a/AVIRO/Custom/SubClass/UITextField/MenuField.swift +++ b/AVIRO/Custom/SubClass/UITextField/MenuField.swift @@ -73,7 +73,7 @@ final class MenuField: UITextField { private func configuration() { textColor = .gray0 - font = CFont.font.medium15 + font = .pretendard(size: 15, weight: .medium) backgroundColor = .gray6 layer.cornerRadius = 10 } diff --git a/AVIRO/Custom/SubClass/UITextField/RegistrationField.swift b/AVIRO/Custom/SubClass/UITextField/RegistrationField.swift index de0832ff..d5e1eb9a 100644 --- a/AVIRO/Custom/SubClass/UITextField/RegistrationField.swift +++ b/AVIRO/Custom/SubClass/UITextField/RegistrationField.swift @@ -67,7 +67,7 @@ class RegistrationField: UITextField { } private func configuration() { - self.font = CFont.font.medium18 + self.font = .pretendard(size: 18, weight: .medium) self.textColor = .gray0 self.layer.cornerRadius = 25 self.backgroundColor = .gray6 diff --git a/AVIRO/Custom/SubClass/UITextField/SearchField.swift b/AVIRO/Custom/SubClass/UITextField/SearchField.swift index b63c5d65..890aa66d 100644 --- a/AVIRO/Custom/SubClass/UITextField/SearchField.swift +++ b/AVIRO/Custom/SubClass/UITextField/SearchField.swift @@ -62,7 +62,7 @@ final class SearchField: UITextField { private func configuration() { textColor = .keywordBlue - font = CFont.font.medium18 + font = .pretendard(size: 18, weight: .medium) backgroundColor = .gray6 layer.cornerRadius = 10 } diff --git a/AVIRO/Custom/SubClass/UITextLabel/NoResultLabel.swift b/AVIRO/Custom/SubClass/UITextLabel/NoResultLabel.swift index e662f9d5..8b714ed2 100644 --- a/AVIRO/Custom/SubClass/UITextLabel/NoResultLabel.swift +++ b/AVIRO/Custom/SubClass/UITextLabel/NoResultLabel.swift @@ -20,7 +20,7 @@ final class NoResultLabel: UILabel { } private func setupAttribute() { - self.font = CFont.font.medium15 + self.font = .pretendard(size: 15, weight: .medium) self.textColor = .gray2 self.numberOfLines = 2 } diff --git a/AVIRO/Custom/SubClass/UITextLabel/PlaceView/MenuTypeLabel.swift b/AVIRO/Custom/SubClass/UITextLabel/PlaceView/MenuTypeLabel.swift index fea5b690..b247b001 100644 --- a/AVIRO/Custom/SubClass/UITextLabel/PlaceView/MenuTypeLabel.swift +++ b/AVIRO/Custom/SubClass/UITextLabel/PlaceView/MenuTypeLabel.swift @@ -57,7 +57,7 @@ final class MenuTypeLabel: UILabel { private func setAttribute() { self.layer.cornerRadius = 12 self.layer.borderWidth = 1 - self.font = CFont.font.bold11 + self.font = .pretendard(size: 11, weight: .bold) } private func isVeganType() { diff --git a/AVIRO/Custom/SubClass/UITextLabel/TutorialTopLabel.swift b/AVIRO/Custom/SubClass/UITextLabel/TutorialTopLabel.swift index 88047324..6326173f 100644 --- a/AVIRO/Custom/SubClass/UITextLabel/TutorialTopLabel.swift +++ b/AVIRO/Custom/SubClass/UITextLabel/TutorialTopLabel.swift @@ -44,7 +44,7 @@ final class TutorialTopLabel: UILabel { } private func setAttribute() { - self.font = CFont.font.heavy17 + self.font = .pretendard(size: 17, weight: .heavy) self.backgroundColor = UIColor(red: 0.87, green: 0.95, blue: 1, alpha: 1) self.layer.cornerRadius = 10 self.textAlignment = .center diff --git a/AVIRO/Custom/Utility/AmplitudeUtility.swift b/AVIRO/Custom/Utility/AmplitudeUtility.swift index 0b396d7a..308e83f9 100644 --- a/AVIRO/Custom/Utility/AmplitudeUtility.swift +++ b/AVIRO/Custom/Utility/AmplitudeUtility.swift @@ -199,7 +199,7 @@ final class AmplitudeUtility: AmplitudeProtocol { func levelupDidNotMove(with level: Int) { amplitude?.track( - eventType: AMType.levelupDidMove.rawValue, + eventType: AMType.levelupDidNotMove.rawValue, eventProperties: ["level": level] ) } diff --git a/AVIRO/Domain/Entities/User/LoginInfo.swift b/AVIRO/Domain/Entities/User/LoginInfo.swift new file mode 100644 index 00000000..c6e627ad --- /dev/null +++ b/AVIRO/Domain/Entities/User/LoginInfo.swift @@ -0,0 +1,21 @@ +// +// LoginInfo.swift +// AVIRO +// +// Created by 전성훈 on 6/28/24. +// + +import Foundation + +enum LoginType { + case apple + case google + case kakao + case naver +} + +struct LoginInfo { + var refreshToken: String? + var userID: String? + var type: LoginType +} diff --git a/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AppleAuthRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AppleAuthRepositoryInterface.swift deleted file mode 100644 index 095da9fa..00000000 --- a/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AppleAuthRepositoryInterface.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// AppleAuthRepositoryInterface.swift -// AVIRO -// -// Created by 전성훈 on 5/30/24. -// - -import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AutoLoginRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AutoLoginRepositoryInterface.swift deleted file mode 100644 index 43914861..00000000 --- a/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/AutoLoginRepositoryInterface.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// AutoLoginRepositoryInterface.swift -// AVIRO -// -// Created by 전성훈 on 5/30/24. -// - -import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift new file mode 100644 index 00000000..644596ed --- /dev/null +++ b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift @@ -0,0 +1,16 @@ +// +// SocialLoginRepositoryInterface.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation + +protocol SocialLoginRepositoryInterface { + // TODO: Make Result `User` Model + func login(completion: @escaping (Result) -> Void) + // TODO: Match the existing output + func logout(completion: @escaping (Result) -> Void) + func autoLogin(completion: @escaping (Result) -> Void) +} diff --git a/AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/UserAccountRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/UserAccountRepositoryInterface.swift similarity index 100% rename from AVIRO/Domain/RepositoryInterfaces/AuthRepositoryInterfaces/UserAccountRepositoryInterface.swift rename to AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/UserAccountRepositoryInterface.swift diff --git a/AVIRO/Domain/UseCases/AuthUseCase.swift b/AVIRO/Domain/UseCases/AuthUseCase.swift deleted file mode 100644 index d74032ed..00000000 --- a/AVIRO/Domain/UseCases/AuthUseCase.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// AuthUseCase.swift -// AVIRO -// -// Created by 전성훈 on 5/30/24. -// - -import Foundation diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift new file mode 100644 index 00000000..529815eb --- /dev/null +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -0,0 +1,48 @@ +// +// SocialLoginUseCase.swift +// AVIRO +// +// Created by 전성훈 on 5/30/24. +// + +import Foundation + +protocol SocialLoginUseCaseInterface: AnyObject { + func login(type: LoginType, completion: @escaping (Result) -> Void) + func logout(type: LoginType, completion: @escaping (Result) -> Void) +} + +final class SocialLoginUseCase { + private let appleLoginRepository: SocialLoginRepositoryInterface + private let googleLoginRepository: SocialLoginRepositoryInterface + private let kakaoLoginRepository: SocialLoginRepositoryInterface + private let naverLoginRepository: SocialLoginRepositoryInterface + + init( + appleLoginRepository: SocialLoginRepositoryInterface, + googleLoginRepository: SocialLoginRepositoryInterface, + kakaoLoginRepository: SocialLoginRepositoryInterface, + naverLoginRepository: SocialLoginRepositoryInterface + ) { + self.appleLoginRepository = appleLoginRepository + self.googleLoginRepository = googleLoginRepository + self.kakaoLoginRepository = kakaoLoginRepository + self.naverLoginRepository = naverLoginRepository + } +} + +extension SocialLoginUseCase: SocialLoginUseCaseInterface { + func login( + type: LoginType, + completion: @escaping (Result) -> Void + ) { + + } + + func logout( + type: LoginType, + completion: @escaping (Result) -> Void + ) { + + } +} diff --git a/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HeaderView/HistoryHeaderView.swift b/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HeaderView/HistoryHeaderView.swift index b59453ed..5338ff3b 100644 --- a/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HeaderView/HistoryHeaderView.swift +++ b/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HeaderView/HistoryHeaderView.swift @@ -18,7 +18,7 @@ final class HistoryHeaderView: UIView { label.text = Text.title.rawValue label.textColor = .gray0 - label.font = CFont.font.semibold15 + label.font = .pretendard(size: 15, weight: .semibold) return label }() @@ -27,7 +27,7 @@ final class HistoryHeaderView: UIView { let button = UIButton() button.setTitle(Text.button.rawValue, for: .normal) - button.titleLabel?.font = CFont.font.semibold14 + button.titleLabel?.font = .pretendard(size: 14, weight: .semibold) button.setTitleColor(.gray1, for: .normal) button.backgroundColor = .gray6 diff --git a/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HeaderView/PlaceListHeaderView.swift b/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HeaderView/PlaceListHeaderView.swift index a9becaa4..1fbf445f 100644 --- a/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HeaderView/PlaceListHeaderView.swift +++ b/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HeaderView/PlaceListHeaderView.swift @@ -21,7 +21,7 @@ final class PlaceListHeaderView: UIView { button.setTitle(title, for: .normal) button.setTitleColor(.gray3, for: .normal) - button.titleLabel?.font = CFont.font.medium16 + button.titleLabel?.font = .pretendard(size: 16, weight: .medium) button.titleLabel?.textAlignment = .left button.setImage(UIImage.sorting, for: .normal) @@ -43,7 +43,7 @@ final class PlaceListHeaderView: UIView { button.setTitle(title, for: .normal) button.setTitleColor(.gray3, for: .normal) - button.titleLabel?.font = CFont.font.medium16 + button.titleLabel?.font = .pretendard(size: 16, weight: .medium) button.titleLabel?.textAlignment = .left button.setImage(UIImage.sorting, for: .normal) diff --git a/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HistoryTableViewCell.swift b/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HistoryTableViewCell.swift index a6b2195c..4bf93894 100644 --- a/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HistoryTableViewCell.swift +++ b/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HistoryTableViewCell.swift @@ -22,7 +22,7 @@ final class HistoryTableViewCell: UITableViewCell { label.numberOfLines = 1 label.lineBreakMode = .byCharWrapping label.textColor = .gray1 - label.font = CFont.font.semibold16 + label.font = .pretendard(size: 16, weight: .semibold) return label }() diff --git a/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HomeSearchViewTableViewCell.swift b/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HomeSearchViewTableViewCell.swift index c00c1190..0c521b3f 100644 --- a/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HomeSearchViewTableViewCell.swift +++ b/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/HomeSearchViewTableViewCell.swift @@ -18,7 +18,7 @@ final class HomeSearchViewTableViewCell: UITableViewCell { let label = UILabel() label.numberOfLines = 1 - label.font = CFont.font.medium18 + label.font = .pretendard(size: 18, weight: .medium) label.textColor = .gray0 return label @@ -28,7 +28,7 @@ final class HomeSearchViewTableViewCell: UITableViewCell { let label = UILabel() label.numberOfLines = 1 - label.font = CFont.font.regular15 + label.font = .pretendard(size: 15, weight: .regular) label.textColor = .gray3 return label @@ -37,7 +37,7 @@ final class HomeSearchViewTableViewCell: UITableViewCell { private lazy var distance: UILabel = { let label = UILabel() - label.font = CFont.font.regular14 + label.font = .pretendard(size: 14, weight: .regular) label.textColor = .gray2 label.textAlignment = .right diff --git a/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/NoHistoryLabelView.swift b/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/NoHistoryLabelView.swift index 3f41d2b9..86712dd3 100644 --- a/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/NoHistoryLabelView.swift +++ b/AVIRO/Scene/Feature/Home/HomeSearch/ViewController/SubView/NoHistoryLabelView.swift @@ -12,7 +12,7 @@ final class NoHistoryLabelView: UIView { let label = UILabel() label.numberOfLines = 2 - label.font = CFont.font.medium14 + label.font = .pretendard(size: 14, weight: .medium) label.textColor = .gray3 return label @@ -22,7 +22,7 @@ final class NoHistoryLabelView: UIView { let label = UILabel() label.numberOfLines = 2 - label.font = CFont.font.bold16 + label.font = .pretendard(size: 16, weight: .bold) label.textColor = .gray1 return label diff --git a/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/OperationHours/PlaceOperationSubView/OperationHourView.swift b/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/OperationHours/PlaceOperationSubView/OperationHourView.swift index c48d01d1..aba26149 100644 --- a/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/OperationHours/PlaceOperationSubView/OperationHourView.swift +++ b/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/OperationHours/PlaceOperationSubView/OperationHourView.swift @@ -11,7 +11,7 @@ final class OperationHourView: UIView { private lazy var dayLabel: UILabel = { let label = UILabel() - label.font = CFont.font.medium15 + label.font = .pretendard(size: 15, weight: .medium) label.textColor = .gray1 return label @@ -20,7 +20,7 @@ final class OperationHourView: UIView { private lazy var operatingHourLabel: UILabel = { let label = UILabel() - label.font = CFont.font.medium15 + label.font = .pretendard(size: 15, weight: .medium) label.textColor = .gray1 return label @@ -29,7 +29,7 @@ final class OperationHourView: UIView { private lazy var breakTimeLabel: UILabel = { let label = UILabel() - label.font = CFont.font.medium15 + label.font = .pretendard(size: 15, weight: .medium) label.textColor = .gray3 return label @@ -110,23 +110,22 @@ final class OperationHourView: UIView { } private func isToday() { - dayLabel.font = CFont.font.semibold15 + dayLabel.font = .pretendard(size: 15, weight: .semibold) dayLabel.textColor = .main - operatingHourLabel.font = CFont.font.semibold15 - + operatingHourLabel.font = .pretendard(size: 15, weight: .semibold) operatingHourLabel.textColor = .main - breakTimeLabel.font = CFont.font.semibold15 + breakTimeLabel.font = .pretendard(size: 15, weight: .semibold) breakTimeLabel.textColor = .main } private func isNotToday() { - dayLabel.font = CFont.font.medium15 + dayLabel.font = .pretendard(size: 15, weight: .medium) dayLabel.textColor = .gray1 - operatingHourLabel.font = CFont.font.medium15 - breakTimeLabel.font = CFont.font.medium15 + operatingHourLabel.font = .pretendard(size: 15, weight: .medium) + breakTimeLabel.font = .pretendard(size: 15, weight: .medium) breakTimeLabel.textColor = .gray3 } diff --git a/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/OperationHours/PlaceOperationSubView/OperationHoursView.swift b/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/OperationHours/PlaceOperationSubView/OperationHoursView.swift index 5c8dcae1..1042bd75 100644 --- a/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/OperationHours/PlaceOperationSubView/OperationHoursView.swift +++ b/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/OperationHours/PlaceOperationSubView/OperationHoursView.swift @@ -13,7 +13,7 @@ final class OperationHoursView: UIView { label.text = "영업 시간" label.textColor = .gray0 - label.font = CFont.font.bold20 + label.font = .pretendard(size: 20, weight: .bold) return label }() diff --git a/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/PlaceSummaryView.swift b/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/PlaceSummaryView.swift index 84e75dd6..4a6b03bd 100644 --- a/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/PlaceSummaryView.swift +++ b/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/PlaceSummaryView.swift @@ -155,7 +155,7 @@ final class PlaceSummaryView: UIView { private lazy var whenSlideTopLabel: UILabel = { let label = UILabel() - label.font = CFont.font.medium15 + label.font = .pretendard(size: 15, weight: .medium) label.numberOfLines = 1 return label @@ -164,7 +164,7 @@ final class PlaceSummaryView: UIView { private lazy var whenSlideMiddleLabel: UILabel = { let label = UILabel() - label.font = CFont.font.heavy24 + label.font = .pretendard(size: 24, weight: .heavy) label.textColor = .gray0 label.numberOfLines = 3 label.lineBreakMode = .byCharWrapping @@ -176,7 +176,7 @@ final class PlaceSummaryView: UIView { private lazy var whenSlideBottomLabel: UILabel = { let label = UILabel() - label.font = CFont.font.regular14 + label.font = .pretendard(size: 14, weight: .regular) label.textColor = .gray2 return label @@ -195,7 +195,7 @@ final class PlaceSummaryView: UIView { private lazy var whenFullTitle: UILabel = { let label = UILabel() - label.font = CFont.font.semibold18 + label.font = .pretendard(size: 18, weight: .semibold) label.textAlignment = .center label.lineBreakMode = .byCharWrapping label.numberOfLines = 2 diff --git a/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/SegmentedControlSubView/SubView/PlaceInfoView.swift b/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/SegmentedControlSubView/SubView/PlaceInfoView.swift index 357b574c..ab435535 100644 --- a/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/SegmentedControlSubView/SubView/PlaceInfoView.swift +++ b/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/SegmentedControlSubView/SubView/PlaceInfoView.swift @@ -24,7 +24,7 @@ final class PlaceInfoView: UIView { private var title: UILabel = { let label = UILabel() - label.font = CFont.font.bold20 + label.font = .pretendard(size: 29, weight: .bold) label.textColor = .gray0 label.text = Text.title.rawValue @@ -34,7 +34,7 @@ final class PlaceInfoView: UIView { private lazy var updatedTimeLabel: UILabel = { let label = UILabel() - label.font = CFont.font.regular13 + label.font = .pretendard(size: 13, weight: .regular) label.textAlignment = .right label.textColor = .gray2 @@ -55,7 +55,7 @@ final class PlaceInfoView: UIView { label.textColor = .gray0 label.numberOfLines = 0 label.lineBreakMode = .byCharWrapping - label.font = CFont.font.medium16 + label.font = .pretendard(size: 16, weight: .medium) return label }() @@ -74,7 +74,7 @@ final class PlaceInfoView: UIView { button.setTitleColor(.keywordBlue, for: .normal) button.backgroundColor = .gray7 button.contentHorizontalAlignment = .left - button.titleLabel?.font = CFont.font.medium16 + button.titleLabel?.font = .pretendard(size: 16, weight: .medium) button.titleLabel?.numberOfLines = 1 button.addTarget( @@ -100,7 +100,7 @@ final class PlaceInfoView: UIView { button.setTitle(Text.timePlus.rawValue, for: .normal) button.setTitleColor(.keywordBlue, for: .normal) button.backgroundColor = .gray7 - button.titleLabel?.font = CFont.font.medium16 + button.titleLabel?.font = .pretendard(size: 16, weight: .medium) button.titleLabel?.textAlignment = .left button.addTarget( @@ -115,7 +115,7 @@ final class PlaceInfoView: UIView { private lazy var timeLabel: UILabel = { let label = UILabel() - label.font = CFont.font.medium16 + label.font = .pretendard(size: 16, weight: .medium) label.numberOfLines = 1 return label @@ -126,7 +126,7 @@ final class PlaceInfoView: UIView { button.setTitle(Text.more.rawValue, for: .normal) button.setTitleColor(.gray2, for: .normal) - button.titleLabel?.font = CFont.font.regular14 + button.titleLabel?.font = .pretendard(size: 14, weight: .regular) button.addTarget( self, @@ -150,7 +150,7 @@ final class PlaceInfoView: UIView { button.setTitleColor(.keywordBlue, for: .normal) button.backgroundColor = .gray7 - button.titleLabel?.font = CFont.font.medium16 + button.titleLabel?.font = .pretendard(size: 16, weight: .medium) button.titleLabel?.numberOfLines = 2 button.titleLabel?.lineBreakMode = .byCharWrapping button.contentHorizontalAlignment = .left diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewController/FinalRegistrationViewController.swift b/AVIRO/Scene/Feature/Login/Registration/ViewController/FinalRegistrationViewController.swift index 0f6aa401..84a58c67 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewController/FinalRegistrationViewController.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewController/FinalRegistrationViewController.swift @@ -36,7 +36,7 @@ final class FinalRegistrationViewController: UIViewController { label.text = Text.title.rawValue label.textColor = .main label.textAlignment = .center - label.font = CFont.font.bold24 + label.font = .pretendard(size: 24, weight: .bold) label.numberOfLines = 2 return label diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewController/FirstRegistrationViewController.swift b/AVIRO/Scene/Feature/Login/Registration/ViewController/FirstRegistrationViewController.swift index 50ccd00a..2f4151bd 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewController/FirstRegistrationViewController.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewController/FirstRegistrationViewController.swift @@ -42,7 +42,7 @@ final class FirstRegistrationViewController: UIViewController { let label = UILabel() label.text = Text.title.rawValue - label.font = CFont.font.bold24 + label.font = .pretendard(size: 24, weight: .bold) label.textColor = .main label.numberOfLines = 2 @@ -53,7 +53,7 @@ final class FirstRegistrationViewController: UIViewController { let label = UILabel() label.text = Text.subtitle.rawValue - label.font = CFont.font.regular14 + label.font = .pretendard(size: 14, weight: .regular) label.textColor = .gray1 return label @@ -73,7 +73,7 @@ final class FirstRegistrationViewController: UIViewController { let label = UILabel() label.text = Text.subInfo.rawValue - label.font = CFont.font.regular13 + label.font = .pretendard(size: 13, weight: .regular) label.numberOfLines = 2 label.lineBreakMode = .byCharWrapping label.textColor = .gray2 @@ -85,7 +85,7 @@ final class FirstRegistrationViewController: UIViewController { let label = UILabel() label.text = Text.subInfo2.rawValue - label.font = CFont.font.regular13 + label.font = .pretendard(size: 13, weight: .regular) label.textColor = .gray2 label.textAlignment = .right diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewController/SecondRegistrationViewController.swift b/AVIRO/Scene/Feature/Login/Registration/ViewController/SecondRegistrationViewController.swift index 310b2408..7ec4e038 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewController/SecondRegistrationViewController.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewController/SecondRegistrationViewController.swift @@ -47,7 +47,7 @@ final class SecondRegistrationViewController: UIViewController { let label = UILabel() label.text = Text.title.rawValue - label.font = CFont.font.bold24 + label.font = .pretendard(size: 24, weight: .bold) label.textColor = .main label.numberOfLines = 2 @@ -57,7 +57,7 @@ final class SecondRegistrationViewController: UIViewController { let label = UILabel() label.text = Text.subtitle.rawValue - label.font = CFont.font.regular14 + label.font = .pretendard(size: 14, weight: .regular) label.textColor = .gray1 return label @@ -76,7 +76,7 @@ final class SecondRegistrationViewController: UIViewController { let label = UILabel() label.text = Text.birthSub.rawValue - label.font = CFont.font.regular13 + label.font = .pretendard(size: 13, weight: .regular) label.textColor = .gray2 return label @@ -127,7 +127,7 @@ final class SecondRegistrationViewController: UIViewController { let label = UILabel() label.text = Text.genderSub.rawValue - label.font = CFont.font.regular13 + label.font = .pretendard(size: 13, weight: .regular) label.textColor = .gray2 return label diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewController/TermsTableCell.swift b/AVIRO/Scene/Feature/Login/Registration/ViewController/TermsTableCell.swift index a796fa81..2178abd3 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewController/TermsTableCell.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewController/TermsTableCell.swift @@ -33,7 +33,7 @@ final class TermsTableCell: UITableViewCell { private lazy var termsLabel: UILabel = { let label = UILabel() - label.font = CFont.font.medium14 + label.font = .pretendard(size: 14, weight: .medium) label.textColor = .gray0 return label diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewController/ThridRegistrationViewController.swift b/AVIRO/Scene/Feature/Login/Registration/ViewController/ThridRegistrationViewController.swift index c42b3c52..157231d8 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewController/ThridRegistrationViewController.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewController/ThridRegistrationViewController.swift @@ -42,7 +42,7 @@ final class ThridRegistrationViewController: UIViewController { let label = UILabel() label.text = Text.title.rawValue - label.font = CFont.font.bold24 + label.font = .pretendard(size: 24, weight: .bold) label.textColor = .main label.numberOfLines = 2 @@ -53,7 +53,7 @@ final class ThridRegistrationViewController: UIViewController { let label = UILabel() label.text = Text.subtitle.rawValue - label.font = CFont.font.regular14 + label.font = .pretendard(size: 14, weight: .regular) label.textColor = .gray1 return label @@ -232,7 +232,7 @@ extension ThridRegistrationViewController: UITableViewDelegate { let allAcceptLabel = UILabel() allAcceptLabel.text = Text.allAccept.rawValue - allAcceptLabel.font = CFont.font.semibold20 + allAcceptLabel.font = .pretendard(size: 20, weight: .semibold) allAcceptLabel.textColor = .gray0 [ diff --git a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift index dcd7378f..99a28e79 100644 --- a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift +++ b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift @@ -51,7 +51,7 @@ final class LoginViewController: UIViewController { paragraphStyle.lineSpacing = 2 let normalAttributes: [NSAttributedString.Key: Any] = [ - .font: CFont.font.medium45, + .font: UIFont.pretendard(size: 45, weight: .medium), .foregroundColor: UIColor.loginTitleColor, .paragraphStyle: paragraphStyle ] @@ -59,7 +59,7 @@ final class LoginViewController: UIViewController { let attributedString = NSMutableAttributedString(string: text, attributes: normalAttributes) let heavyAttributes: [NSAttributedString.Key: Any] = [ - .font: CFont.font.heavy45, + .font: UIFont.pretendard(size: 45, weight: .heavy), .foregroundColor: UIColor.main, .paragraphStyle: paragraphStyle ] @@ -97,7 +97,7 @@ final class LoginViewController: UIViewController { bottom: 0, right: 0 ) - button.titleLabel?.font = CFont.font.medium17 + button.titleLabel?.font = .pretendard(size: 17, weight: .medium) button.layer.borderColor = UIColor.black.cgColor button.layer.borderWidth = 2 diff --git a/AVIRO/Scene/Feature/Tutorial/TutorialCell/TopCell.swift b/AVIRO/Scene/Feature/Tutorial/TutorialCell/TopCell.swift index 3c892e07..555b361f 100644 --- a/AVIRO/Scene/Feature/Tutorial/TutorialCell/TopCell.swift +++ b/AVIRO/Scene/Feature/Tutorial/TutorialCell/TopCell.swift @@ -59,8 +59,8 @@ final class TopCell: UICollectionViewCell { } private func setupSubtitleFont(isTop: Bool, subtitle: String, subtitle2: String) { - let subtitleFont = isTop ? CFont.font.heavy31 : CFont.font.semibold31 - let subtitle2Font = isTop ? CFont.font.semibold31 : CFont.font.heavy31 + let subtitleFont = isTop ? UIFont.pretendard(size: 31, weight: .heavy) : UIFont.pretendard(size: 31, weight: .semibold) + let subtitle2Font = isTop ? UIFont.pretendard(size: 31, weight: .semibold) : UIFont.pretendard(size: 31, weight: .heavy) let attributedSubtitle = NSMutableAttributedString( string: subtitle, From 2d3879d54e83706f3152a26ce7751462e7b3283f Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Mon, 1 Jul 2024 14:36:36 +0900 Subject: [PATCH 14/37] =?UTF-8?q?[Feat]:=20Social=20Media=20Button=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 4 + AVIRO/App/AppController.swift | 5 +- .../Custom/Constants/UIImage+Extension.swift | 12 +- .../Assets/AppleLogo.imageset/AppleLogo.png | Bin 323 -> 0 bytes .../AppleLogo.imageset/AppleLogo@2x.png | Bin 494 -> 0 bytes .../AppleLogo.imageset/AppleLogo@3x.png | Bin 797 -> 0 bytes .../AllApproveCondition.png | Bin .../AllApproveCondition@2x.png | Bin .../AllApproveCondition@3x.png | Bin .../Contents.json | 0 .../ApproveCondition.png | Bin .../ApproveCondition@2x.png | Bin .../ApproveCondition@3x.png | Bin .../ApproveCondition.imageset/Contents.json | 0 .../{ => Assets}/Back.imageset/Back.png | Bin .../{ => Assets}/Back.imageset/Back@2x.png | Bin .../{ => Assets}/Back.imageset/Back@3x.png | Bin .../{ => Assets}/Back.imageset/Contents.json | 0 .../CheckArt.imageset/Contents.json | 0 .../bxs-check-circle.svg.png | Bin .../bxs-check-circle.svg@2x.png | Bin .../bxs-check-circle.svg@3x.png | Bin .../{ => Assets}/Close.imageset/Close.png | Bin .../{ => Assets}/Close.imageset/Close@2x.png | Bin .../{ => Assets}/Close.imageset/Close@3x.png | Bin .../{ => Assets}/Close.imageset/Contents.json | 0 .../Assets}/Contents.json | 0 .../{ => Assets}/Dots.imageset/Contents.json | 0 .../{ => Assets}/Dots.imageset/Dots.png | Bin .../{ => Assets}/Dots.imageset/Dots@2x.png | Bin .../{ => Assets}/Dots.imageset/Dots@3x.png | Bin .../DownBack.imageset/Contents.json | 0 .../DownBack.imageset/DownBack.png | Bin .../DownBack.imageset/DownBack@2x.png | Bin .../DownBack.imageset/DownBack@3x.png | Bin .../DownSorting.imageset/Contents.json | 0 .../DownSorting.imageset/DownSorting.png | Bin .../DownSorting.imageset/DownSorting@2x.png | Bin .../DownSorting.imageset/DownSorting@3x.png | Bin .../{ => Assets}/Edit.imageset/Contents.json | 0 .../{ => Assets}/Edit.imageset/Edit.png | Bin .../{ => Assets}/Edit.imageset/Edit@2x.png | Bin .../{ => Assets}/Edit.imageset/Edit@3x.png | Bin .../EmptyFrame.imageset/Contents.json | 0 .../EmptyFrame.imageset/EmptyFrame.png | Bin .../EmptyFrame.imageset/EmptyFrame@2x.png | Bin .../EmptyFrame.imageset/EmptyFrame@3x.png | Bin .../ErrorArt.imageset/Contents.json | 0 .../ErrorArt.imageset/bxs-error-alt.svg.png | Bin .../bxs-error-alt.svg@2x.png | Bin .../bxs-error-alt.svg@3x.png | Bin .../{ => Assets}/Flag.imageset/Contents.json | 0 .../{ => Assets}/Flag.imageset/Flag.png | Bin .../{ => Assets}/Flag.imageset/Flag@2x.png | Bin .../{ => Assets}/Flag.imageset/Flag@3x.png | Bin .../{ => Assets}/Frame.imageset/Contents.json | 0 .../{ => Assets}/Frame.imageset/Frame.png | Bin .../{ => Assets}/Frame.imageset/Frame@2x.png | Bin .../{ => Assets}/Frame.imageset/Frame@3x.png | Bin .../HomeInfo.imageset/Contents.json | 0 .../HomeInfo.imageset/HomeInfo.png | Bin .../HomeInfo.imageset/HomeInfo@2x.png | Bin .../HomeInfo.imageset/HomeInfo@3x.png | Bin .../InfoCircle.imageset/Contents.json | 0 .../InfoCircle.imageset/InfoCircle.png | Bin .../InfoCircle.imageset/InfoCircle@2x.png | Bin .../InfoCircle.imageset/InfoCircle@3x.png | Bin .../MainSearchStation.imageset/Contents.json | 0 .../MainSearchStation.png | Bin .../MainSearchStation@2x.png | Bin .../MainSearchStation@3x.png | Bin .../MainSearchStore.imageset/Contents.json | 0 .../MainSearchStore.png | Bin .../MainSearchStore@2x.png | Bin .../MainSearchStore@3x.png | Bin .../MapInfo.imageset/Contents.json | 0 .../{ => Assets}/MapInfo.imageset/MapInfo.png | Bin .../MapInfo.imageset/MapInfo@2x.png | Bin .../MapInfo.imageset/MapInfo@3x.png | Bin .../{ => Assets}/Minus.imageset/Contents.json | 0 .../{ => Assets}/Minus.imageset/Minus.png | Bin .../{ => Assets}/Minus.imageset/Minus@2x.png | Bin .../{ => Assets}/Minus.imageset/Minus@3x.png | Bin .../{ => Assets}/More.imageset/Contents.json | 0 .../{ => Assets}/More.imageset/More.png | Bin .../{ => Assets}/More.imageset/More@2x.png | Bin .../{ => Assets}/More.imageset/More@3x.png | Bin .../Pencil.imageset/Contents.json | 0 .../{ => Assets}/Pencil.imageset/Pencil.png | Bin .../Pencil.imageset/Pencil@2x.png | Bin .../Pencil.imageset/Pencil@3x.png | Bin .../PhoneInfo.imageset/Contents.json | 0 .../PhoneInfo.imageset/PhoneInfo.png | Bin .../PhoneInfo.imageset/PhoneInfo@2x.png | Bin .../PhoneInfo.imageset/PhoneInfo@3x.png | Bin .../PlaceReview.imageset/Contents.json | 0 .../PlaceReview.imageset/PlaceComment.png | Bin .../PlaceReview.imageset/PlaceComment@2x.png | Bin .../PlaceReview.imageset/PlaceComment@3x.png | Bin .../PlaceViewMap.imageset/Contents.json | 0 .../PlaceViewMap.imageset/PlaceViewMap.png | Bin .../PlaceViewMap.imageset/PlaceViewMap@2x.png | Bin .../PlaceViewMap.imageset/PlaceViewMap@3x.png | Bin .../{ => Assets}/Plus.imageset/Contents.json | 0 .../{ => Assets}/Plus.imageset/Plus.png | Bin .../{ => Assets}/Plus.imageset/Plus@2x.png | Bin .../{ => Assets}/Plus.imageset/Plus@3x.png | Bin .../PushView.imageset/Contents.json | 0 .../PushView.imageset/PushView.png | Bin .../PushView.imageset/PushView@2x.png | Bin .../PushView.imageset/PushView@3x.png | Bin .../RadioCircle.imageset/Contents.json | 0 .../RadioCircle.imageset/RadioCircle.png | Bin .../RadioCircle.imageset/RadioCircle@2x.png | Bin .../RadioCircle.imageset/RadioCircle@3x.png | Bin .../RadioCircleClicked.imageset/Contents.json | 0 .../RadioCircleClicked.png | Bin .../RadioCircleClicked@2x.png | Bin .../RadioCircleClicked@3x.png | Bin .../RecentlyTime.imageset/Contents.json | 0 .../RecentlyTime.imageset/RecentlyTime.png | Bin .../RecentlyTime.imageset/RecentlyTime@2x.png | Bin .../RecentlyTime.imageset/RecentlyTime@3x.png | Bin .../RequestCheck.imageset/Contents.json | 0 .../RequestCheck.imageset/RequestCheck.png | Bin .../RequestCheck.imageset/RequestCheck@2x.png | Bin .../RequestCheck.imageset/RequestCheck@3x.png | Bin .../Search.imageset/Contents.json | 0 .../{ => Assets}/Search.imageset/Search.png | Bin .../Search.imageset/Search@2x.png | Bin .../Search.imageset/Search@3x.png | Bin .../SmallPushView.imageset/Contents.json | 0 .../SmallPushView.imageset/SmallPushView.png | Bin .../SmallPushView@2x.png | Bin .../SmallPushView@3x.png | Bin .../TimeInfo.imageset/Contents.json | 0 .../TimeInfo.imageset/TimeInfo.png | Bin .../TimeInfo.imageset/TimeInfo@2x.png | Bin .../TimeInfo.imageset/TimeInfo@3x.png | Bin .../X-Circle.imageset/Contents.json | 0 .../X-Circle.imageset/X-Circle.png | Bin .../X-Circle.imageset/X-Circle@2x.png | Bin .../X-Circle.imageset/X-Circle@3x.png | Bin .../X-Circle26.imageset/Contents.json | 0 .../X-Circle26.imageset/close26.png | Bin .../X-Circle26.imageset/close26@2x.png | Bin .../X-Circle26.imageset/close26@3x.png | Bin .../current-location.imageset/Contents.json | 0 .../current-location.png | Bin .../current-location@2x.png | Bin .../current-location@3x.png | Bin .../Contents.json | 0 .../current-locationDisable.png | Bin .../current-locationDisable@2x.png | Bin .../current-locationDisable@3x.png | Bin .../selectedStar.imageset/Contents.json | 0 .../selectedStar.imageset/selectedStar.png | Bin .../selectedStar.imageset/selectedStar@2x.png | Bin .../selectedStar.imageset/selectedStar@3x.png | Bin .../{ => Assets}/share.imageset/Contents.json | 0 .../{ => Assets}/share.imageset/share.png | Bin .../{ => Assets}/share.imageset/share@2x.png | Bin .../{ => Assets}/share.imageset/share@3x.png | Bin .../{ => Assets}/star.imageset/Contents.json | 0 .../{ => Assets}/star.imageset/star.png | Bin .../{ => Assets}/star.imageset/star@2x.png | Bin .../{ => Assets}/star.imageset/star@3x.png | Bin .../starDisable.imageset/Contents.json | 0 .../starDisable.imageset/starDisable.png | Bin .../starDisable.imageset/starDisable@2x.png | Bin .../starDisable.imageset/starDisable@3x.png | Bin .../{ => Assets}/user2.imageset/Contents.json | 0 .../{ => Assets}/user2.imageset/user2.png | Bin .../{ => Assets}/user2.imageset/user2@2x.png | Bin .../{ => Assets}/user2.imageset/user2@3x.png | Bin .../ChallengeInfoGreen.png | Bin .../ChallengeInfoGreen@2x.png | Bin .../ChallengeInfoGreen@3x.png | Bin .../ChallengeInfoGreen.imageset/Contents.json | 0 .../ChallengeInfoOrange.png | Bin .../ChallengeInfoOrange@2x.png | Bin .../ChallengeInfoOrange@3x.png | Bin .../Contents.json | 0 .../ChallengeInfoYellow.png | Bin .../ChallengeInfoYellow@2x.png | Bin .../ChallengeInfoYellow@3x.png | Bin .../Contents.json | 0 .../{Icon => Assets/Challenge}/Contents.json | 0 .../GoldRectangle.imageset/Contents.json | 0 .../GoldRectangle.imageset/GlodRectangle.png | Bin .../GlodRectangle@2x.png | Bin .../GlodRectangle@3x.png | Bin .../GoldTrophy.imageset/Contents.json | 0 .../GoldTrophy.imageset/GlodTrophy.png | Bin .../GoldTrophy.imageset/GlodTrophy@2x.png | Bin .../GoldTrophy.imageset/GlodTrophy@3x.png | Bin .../Point_explain.imageset/Contents.json | 0 .../Point_explain.imageset/Point_explain.png | Bin .../Point_explain@2x.png | Bin .../Point_explain@3x.png | Bin .../IconBox => Assets/Icon}/Contents.json | 0 .../Icon/IconBox/AllBox.imageset/Allbox.png | Bin .../IconBox/AllBox.imageset/Allbox@2x.png | Bin .../IconBox/AllBox.imageset/Allbox@3x.png | Bin .../IconBox/AllBox.imageset/Contents.json | 0 .../Icon/IconBox}/Contents.json | 0 .../IconBox/RequestBox.imageset/Contents.json | 0 .../RequestBox.imageset/Requestbox.png | Bin .../RequestBox.imageset/Requestbox@2x.png | Bin .../RequestBox.imageset/Requestbox@3x.png | Bin .../IconBox/SomeBox.imageset/Contents.json | 0 .../Icon/IconBox/SomeBox.imageset/Somebox.png | Bin .../IconBox/SomeBox.imageset/Somebox@2x.png | Bin .../IconBox/SomeBox.imageset/Somebox@3x.png | Bin .../IconCell/AllCell.imageset/AllCell.png | Bin .../IconCell/AllCell.imageset/AllCell@2x.png | Bin .../IconCell/AllCell.imageset/AllCell@3x.png | Bin .../IconCell/AllCell.imageset/Contents.json | 0 .../Icon/IconCell}/Contents.json | 0 .../ListCellIcon.imageset/Contents.json | 0 .../ListCellIcon.imageset/ListCellIcon.png | Bin .../ListCellIcon.imageset/ListCellIcon@2x.png | Bin .../ListCellIcon.imageset/ListCellIcon@3x.png | Bin .../RequestCell.imageset/Contents.json | 0 .../RequestCell.imageset/RequestCell.png | Bin .../RequestCell.imageset/RequestCell@2x.png | Bin .../RequestCell.imageset/RequestCell@3x.png | Bin .../IconCell/SomeCell.imageset/Contents.json | 0 .../IconCell/SomeCell.imageset/SomeCell.png | Bin .../SomeCell.imageset/SomeCell@2x.png | Bin .../SomeCell.imageset/SomeCell@3x.png | Bin .../IconMarker/AllMap.imageset/AllMap.png | Bin .../IconMarker/AllMap.imageset/AllMap@2x.png | Bin .../IconMarker/AllMap.imageset/AllMap@3x.png | Bin .../IconMarker/AllMap.imageset/Contents.json | 0 .../AllMapClicked.imageset/AllMapClicked.png | Bin .../AllMapClicked@2x.png | Bin .../AllMapClicked@3x.png | Bin .../AllMapClicked.imageset/Contents.json | 0 .../Icon/IconMarker}/Contents.json | 0 .../RequestMap.imageset/Contents.json | 0 .../RequestMap.imageset/RequestMap.png | Bin .../RequestMap.imageset/RequestMap@2x.png | Bin .../RequestMap.imageset/RequestMap@3x.png | Bin .../RequestMapClicked.imageset/Contents.json | 0 .../RequestMapClicked.png | Bin .../RequestMapClicked@2x.png | Bin .../RequestMapClicked@3x.png | Bin .../IconMarker/SomeMap.imageset/Contents.json | 0 .../IconMarker/SomeMap.imageset/SomeMap.png | Bin .../SomeMap.imageset/SomeMap@2x.png | Bin .../SomeMap.imageset/SomeMap@3x.png | Bin .../SomeMapClicked.imageset/Contents.json | 0 .../SomeMapClicked.png | Bin .../SomeMapClicked@2x.png | Bin .../SomeMapClicked@3x.png | Bin .../AllOption.imageset/AllOption.png | Bin .../AllOption.imageset/AllOption@2x.png | Bin .../AllOption.imageset/AllOption@3x.png | Bin .../AllOption.imageset/Contents.json | 0 .../Icon/IconOptionButton}/Contents.json | 0 .../RequestOption.imageset/Contents.json | 0 .../RequestOption.imageset/RequestOption.png | Bin .../RequestOption@2x.png | Bin .../RequestOption@3x.png | Bin .../SomeOption.imageset/Contents.json | 0 .../SomeOption.imageset/SomeOption.png | Bin .../SomeOption.imageset/SomeOption@2x.png | Bin .../SomeOption.imageset/SomeOption@3x.png | Bin .../AllMapStar.imageset/AllMapStar.png | Bin .../AllMapStar.imageset/AllMapStar@2x.png | Bin .../AllMapStar.imageset/AllMapStar@3x.png | Bin .../AllMapStar.imageset/Contents.json | 0 .../AllMapStarClicked.png | Bin .../AllMapStarClicked@2x.png | Bin .../AllMapStarClicked@3x.png | Bin .../AllMapStarClicked.imageset/Contents.json | 0 .../Icon/IconStarMarker}/Contents.json | 0 .../RequestMapStar.imageset/Contents.json | 0 .../RequestMapStar.png | Bin .../RequestMapStar@2x.png | Bin .../RequestMapStar@3x.png | Bin .../Contents.json | 0 .../RequestMapStarClicked.png | Bin .../RequestMapStarClicked@2x.png | Bin .../RequestMapStarClicked@3x.png | Bin .../SomeMapStar.imageset/Contents.json | 0 .../SomeMapStar.imageset/SomeMapStar.png | Bin .../SomeMapStar.imageset/SomeMapStar@2x.png | Bin .../SomeMapStar.imageset/SomeMapStar@3x.png | Bin .../SomeMapStarClicked.imageset/Contents.json | 0 .../SomeMapStarClicked.png | Bin .../SomeMapStarClicked@2x.png | Bin .../SomeMapStarClicked@3x.png | Bin .../All_Box_Bar.imageset/All_Box_Bar.png | Bin .../All_Box_Bar.imageset/All_Box_Bar@2x.png | Bin .../All_Box_Bar.imageset/All_Box_Bar@3x.png | Bin .../All_Box_Bar.imageset/Contents.json | 0 .../All_Box_Bread.imageset/All_Box_Bread.png | Bin .../All_Box_Bread@2x.png | Bin .../All_Box_Bread@3x.png | Bin .../All_Box_Bread.imageset/Contents.json | 0 .../All_Box_Coffee.png | Bin .../All_Box_Coffee@2x.png | Bin .../All_Box_Coffee@3x.png | Bin .../All_Box_Coffee.imageset/Contents.json | 0 .../All_Box_Restaurant.png | Bin .../All_Box_Restaurant@2x.png | Bin .../All_Box_Restaurant@3x.png | Bin .../All_Box_Restaurant.imageset/Contents.json | 0 .../All_Clicked_Bar.png | Bin .../All_Clicked_Bar@2x.png | Bin .../All_Clicked_Bar@3x.png | Bin .../All_Clicked_Bar.imageset/Contents.json | 0 .../All_Clicked_Bread.png | Bin .../All_Clicked_Bread@2x.png | Bin .../All_Clicked_Bread@3x.png | Bin .../All_Clicked_Bread.imageset/Contents.json | 0 .../All_Clicked_Coffee.png | Bin .../All_Clicked_Coffee@2x.png | Bin .../All_Clicked_Coffee@3x.png | Bin .../All_Clicked_Coffee.imageset/Contents.json | 0 .../All_Clicked_Fav.png | Bin .../All_Clicked_Fav@2x.png | Bin .../All_Clicked_Fav@3x.png | Bin .../All_Clicked_Fav.imageset/Contents.json | 0 .../All_Clicked_Restaurant.png | Bin .../All_Clicked_Restaurant@2x.png | Bin .../All_Clicked_Restaurant@3x.png | Bin .../Contents.json | 0 .../All_Default_Bar.png | Bin .../All_Default_Bar@2x.png | Bin .../All_Default_Bar@3x.png | Bin .../All_Default_Bar.imageset/Contents.json | 0 .../All_Default_Bread.png | Bin .../All_Default_Bread@2x.png | Bin .../All_Default_Bread@3x.png | Bin .../All_Default_Bread.imageset/Contents.json | 0 .../All_Default_Coffee.png | Bin .../All_Default_Coffee@2x.png | Bin .../All_Default_Coffee@3x.png | Bin .../All_Default_Coffee.imageset/Contents.json | 0 .../All_Default_Fav.png | Bin .../All_Default_Fav@2x.png | Bin .../All_Default_Fav@3x.png | Bin .../All_Default_Fav.imageset/Contents.json | 0 .../All_Default_Restaurant.png | Bin .../All_Default_Restaurant@2x.png | Bin .../All_Default_Restaurant@3x.png | Bin .../Contents.json | 0 .../Icon_2.0/Btn_home.imageset/Btn_home.png | Bin .../Btn_home.imageset/Btn_home@2x.png | Bin .../Btn_home.imageset/Btn_home@3x.png | Bin .../Icon_2.0/Btn_home.imageset/Contents.json | 0 .../Btn_pencil.imageset/Btn_pencil.png | Bin .../Btn_pencil.imageset/Btn_pencil@2x.png | Bin .../Btn_pencil.imageset/Btn_pencil@3x.png | Bin .../Btn_pencil.imageset/Contents.json | 0 .../Btn_plus_square.png | Bin .../Btn_plus_square@2x.png | Bin .../Btn_plus_square@3x.png | Bin .../Btn_plus_square.imageset/Contents.json | 0 .../Cancel_btn.imageset/Cancel_btn.png | Bin .../Cancel_btn.imageset/Cancel_btn@2x.png | Bin .../Cancel_btn.imageset/Cancel_btn@3x.png | Bin .../Cancel_btn.imageset/Contents.json | 0 .../Challenge_Info_Green.png | Bin .../Challenge_Info_Green@2x.png | Bin .../Challenge_Info_Green@3x.png | Bin .../Contents.json | 0 .../Challenge_Info_Orange.png | Bin .../Challenge_Info_Orange@2x.png | Bin .../Challenge_Info_Orange@3x.png | Bin .../Contents.json | 0 .../Challenge_Info_Yellow.png | Bin .../Challenge_Info_Yellow@2x.png | Bin .../Challenge_Info_Yellow@3x.png | Bin .../Contents.json | 0 .../Icon_2.0}/Contents.json | 0 .../Default_btn_Bar.imageset/Contents.json | 0 .../Default_btn_Bar.png | Bin .../Default_btn_Bar@2x.png | Bin .../Default_btn_Bar@3x.png | Bin .../Default_btn_Bread.imageset/Contents.json | 0 .../Default_btn_Bread.png | Bin .../Default_btn_Bread@2x.png | Bin .../Default_btn_Bread@3x.png | Bin .../Default_btn_Coffee.imageset/Contents.json | 0 .../Default_btn_Coffee.png | Bin .../Default_btn_Coffee@2x.png | Bin .../Default_btn_Coffee@3x.png | Bin .../Contents.json | 0 .../Default_btn_Restaurant.png | Bin .../Default_btn_Restaurant@2x.png | Bin .../Default_btn_Restaurant@3x.png | Bin .../On_btn_Bar.imageset/Contents.json | 0 .../On_btn_Bar.imageset/On_btn_Bar.png | Bin .../On_btn_Bar.imageset/On_btn_Bar@2x.png | Bin .../On_btn_Bar.imageset/On_btn_Bar@3x.png | Bin .../On_btn_Bread.imageset/Contents.json | 0 .../On_btn_Bread.imageset/On_btn_Bread.png | Bin .../On_btn_Bread.imageset/On_btn_Bread@2x.png | Bin .../On_btn_Bread.imageset/On_btn_Bread@3x.png | Bin .../On_btn_Coffee.imageset/Contents.json | 0 .../On_btn_Coffee.imageset/On_btn_Coffee.png | Bin .../On_btn_Coffee@2x.png | Bin .../On_btn_Coffee@3x.png | Bin .../On_btn_Restaurant.imageset/Contents.json | 0 .../On_btn_Restaurant.png | Bin .../On_btn_Restaurant@2x.png | Bin .../On_btn_Restaurant@3x.png | Bin .../Request_Box_Bar.imageset/Contents.json | 0 .../Request_Box_Bar.png | Bin .../Request_Box_Bar@2x.png | Bin .../Request_Box_Bar@3x.png | Bin .../Request_Box_Bread.imageset/Contents.json | 0 .../Request_Box_Bread.png | Bin .../Request_Box_Bread@2x.png | Bin .../Request_Box_Bread@3x.png | Bin .../Request_Box_Coffee.imageset/Contents.json | 0 .../Request_Box_Coffee.png | Bin .../Request_Box_Coffee@2x.png | Bin .../Request_Box_Coffee@3x.png | Bin .../Contents.json | 0 .../Request_Box_Restaurant.png | Bin .../Request_Box_Restaurant@2x.png | Bin .../Request_Box_Restaurant@3x.png | Bin .../Contents.json | 0 .../Request_Clicked_Bar.png | Bin .../Request_Clicked_Bar@2x.png | Bin .../Request_Clicked_Bar@3x.png | Bin .../Contents.json | 0 .../Request_Clicked_Bread.png | Bin .../Request_Clicked_Bread@2x.png | Bin .../Request_Clicked_Bread@3x.png | Bin .../Contents.json | 0 .../Request_Clicked_Coffee.png | Bin .../Request_Clicked_Coffee@2x.png | Bin .../Request_Clicked_Coffee@3x.png | Bin .../Contents.json | 0 .../Request_Clicked_Fav.png | Bin .../Request_Clicked_Fav@2x.png | Bin .../Request_Clicked_Fav@3x.png | Bin .../Contents.json | 0 .../Request_Clicked_Restaurant.png | Bin .../Request_Clicked_Restaurant@2x.png | Bin .../Request_Clicked_Restaurant@3x.png | Bin .../Contents.json | 0 .../Request_Default_Bar.png | Bin .../Request_Default_Bar@2x.png | Bin .../Request_Default_Bar@3x.png | Bin .../Contents.json | 0 .../Request_Default_Bread.png | Bin .../Request_Default_Bread@2x.png | Bin .../Request_Default_Bread@3x.png | Bin .../Contents.json | 0 .../Request_Default_Coffee.png | Bin .../Request_Default_Coffee@2x.png | Bin .../Request_Default_Coffee@3x.png | Bin .../Contents.json | 0 .../Request_Default_Fav.png | Bin .../Request_Default_Fav@2x.png | Bin .../Request_Default_Fav@3x.png | Bin .../Contents.json | 0 .../Request_Default_Restaurant.png | Bin .../Request_Default_Restaurant@2x.png | Bin .../Request_Default_Restaurant@3x.png | Bin .../Some_Box_Bar.imageset/Contents.json | 0 .../Some_Box_Bar.imageset/Some_Box_Bar.png | Bin .../Some_Box_Bar.imageset/Some_Box_Bar@2x.png | Bin .../Some_Box_Bar.imageset/Some_Box_Bar@3x.png | Bin .../Some_Box_Bread.imageset/Contents.json | 0 .../Some_Box_Bread.png | Bin .../Some_Box_Bread@2x.png | Bin .../Some_Box_Bread@3x.png | Bin .../Some_Box_Coffee.imageset/Contents.json | 0 .../Some_Box_Coffee.png | Bin .../Some_Box_Coffee@2x.png | Bin .../Some_Box_Coffee@3x.png | Bin .../Contents.json | 0 .../Some_Box_Restaurant.png | Bin .../Some_Box_Restaurant@2x.png | Bin .../Some_Box_Restaurant@3x.png | Bin .../Some_Clicked_Bar.imageset/Contents.json | 0 .../Some_Clicked_Bar.png | Bin .../Some_Clicked_Bar@2x.png | Bin .../Some_Clicked_Bar@3x.png | Bin .../Some_Clicked_Bread.imageset/Contents.json | 0 .../Some_Clicked_Bread.png | Bin .../Some_Clicked_Bread@2x.png | Bin .../Some_Clicked_Bread@3x.png | Bin .../Contents.json | 0 .../Some_Clicked_Coffee.png | Bin .../Some_Clicked_Coffee@2x.png | Bin .../Some_Clicked_Coffee@3x.png | Bin .../Some_Clicked_Fav.imageset/Contents.json | 0 .../Some_Clicked_Fav.png | Bin .../Some_Clicked_Fav@2x.png | Bin .../Some_Clicked_Fav@3x.png | Bin .../Contents.json | 0 .../Some_Clicked_Restaurant.png | Bin .../Some_Clicked_Restaurant@2x.png | Bin .../Some_Clicked_Restaurant@3x.png | Bin .../Some_Default_Bar.imageset/Contents.json | 0 .../Some_Default_Bar.png | Bin .../Some_Default_Bar@2x.png | Bin .../Some_Default_Bar@3x.png | Bin .../Some_Default_Bread.imageset/Contents.json | 0 .../Some_Default_Bread.png | Bin .../Some_Default_Bread@2x.png | Bin .../Some_Default_Bread@3x.png | Bin .../Contents.json | 0 .../Some_Default_Coffee.png | Bin .../Some_Default_Coffee@2x.png | Bin .../Some_Default_Coffee@3x.png | Bin .../Some_Default_Fav.imageset/Contents.json | 0 .../Some_Default_Fav.png | Bin .../Some_Default_Fav@2x.png | Bin .../Some_Default_Fav@3x.png | Bin .../Contents.json | 0 .../Some_Default_Restaurant.png | Bin .../Some_Default_Restaurant@2x.png | Bin .../Some_Default_Restaurant@3x.png | Bin .../Launch&Login}/Contents.json | 0 .../LaunchTitle.imageset/Contents.json | 23 ++++ .../LaunchTitle.imageset/avrioReverse.png | Bin 0 -> 3756 bytes .../LaunchTitle.imageset/avrioReverse@2x.png | Bin 0 -> 6947 bytes .../LaunchTitle.imageset/avrioReverse@3x.png | Bin 0 -> 10012 bytes .../Launchbg.imageset/Contents.json | 0 .../Launch&Login}/Launchbg.imageset/bg.png | Bin .../Launch&Login}/Launchbg.imageset/bg@2x.png | Bin .../Launch&Login}/Launchbg.imageset/bg@3x.png | Bin .../aviro.imageset/Contents.json | 0 .../Launch&Login}/aviro.imageset/aviro.png | Bin .../Launch&Login}/aviro.imageset/aviro@2x.png | Bin .../Launch&Login}/aviro.imageset/aviro@3x.png | Bin .../avrioReverse.imageset/Contents.json | 23 ++++ .../avrioReverse.imageset/avrioReverse.png | Bin 0 -> 3756 bytes .../avrioReverse.imageset/avrioReverse@2x.png | Bin 0 -> 6947 bytes .../avrioReverse.imageset/avrioReverse@3x.png | Bin 0 -> 10012 bytes .../Screen/Contents 1.imageset/Contents 1.png | Bin .../Contents 1.imageset/Contents 1@2x.png | Bin .../Contents 1.imageset/Contents 1@3x.png | Bin .../Screen/Contents 1.imageset/Contents.json | 0 .../Screen/Contents 2.imageset/Contents 2.png | Bin .../Contents 2.imageset/Contents 2@2x.png | Bin .../Contents 2.imageset/Contents 2@3x.png | Bin .../Screen/Contents 2.imageset/Contents.json | 0 .../Screen/Contents 3.imageset/Contents 3.png | Bin .../Contents 3.imageset/Contents 3@2x.png | Bin .../Contents 3.imageset/Contents 3@3x.png | Bin .../Screen/Contents 3.imageset/Contents.json | 0 .../Screen/Contents 4.imageset/Contents 4.png | Bin .../Contents 4.imageset/Contents 4@2x.png | Bin .../Contents 4.imageset/Contents 4@3x.png | Bin .../Screen/Contents 4.imageset/Contents.json | 0 .../{ => Assets}/Screen/Contents.json | 0 .../SocialMedia/Apple.imageset/Apple.png | Bin 0 -> 324 bytes .../SocialMedia/Apple.imageset/Apple@2x.png | Bin 0 -> 512 bytes .../SocialMedia/Apple.imageset/Apple@3x.png | Bin 0 -> 699 bytes .../Apple.imageset}/Contents.json | 6 +- .../AppleLogin.imageset/AppleLogin.png | Bin 0 -> 442 bytes .../AppleLogin.imageset/AppleLogin@2x.png | Bin 0 -> 820 bytes .../AppleLogin.imageset/AppleLogin@3x.png | Bin 0 -> 1181 bytes .../AppleLogin.imageset}/Contents.json | 6 +- .../SocialMedia}/Contents.json | 0 .../SocialMedia/Google.imageset/Contents.json | 23 ++++ .../SocialMedia/Google.imageset/Google.png | Bin 0 -> 658 bytes .../SocialMedia/Google.imageset/Google@2x.png | Bin 0 -> 1147 bytes .../SocialMedia/Google.imageset/Google@3x.png | Bin 0 -> 1662 bytes .../GoogleLogin.imageset/Contents.json | 23 ++++ .../GoogleLogin.imageset/GoogleLogin.png | Bin 0 -> 831 bytes .../GoogleLogin.imageset/GoogleLogin@2x.png | Bin 0 -> 1481 bytes .../GoogleLogin.imageset/GoogleLogin@3x.png | Bin 0 -> 2019 bytes .../SocialMedia/Kakao.imageset/Contents.json | 23 ++++ .../SocialMedia/Kakao.imageset/Kakao.png | Bin 0 -> 468 bytes .../SocialMedia/Kakao.imageset/Kakao@2x.png | Bin 0 -> 761 bytes .../SocialMedia/Kakao.imageset/Kakao@3x.png | Bin 0 -> 1046 bytes .../KakaoLogin.imageset/Contents.json | 23 ++++ .../KakaoLogin.imageset/KakaoLogin.png | Bin 0 -> 513 bytes .../KakaoLogin.imageset/KakaoLogin@2x.png | Bin 0 -> 898 bytes .../KakaoLogin.imageset/KakaoLogin@3x.png | Bin 0 -> 1289 bytes .../SocialMedia/Naver.imageset/Contents.json | 23 ++++ .../SocialMedia/Naver.imageset/Naver.png | Bin 0 -> 365 bytes .../SocialMedia/Naver.imageset/Naver@2x.png | Bin 0 -> 484 bytes .../SocialMedia/Naver.imageset/Naver@3x.png | Bin 0 -> 665 bytes .../NaverLogin.imageset/Contents.json | 23 ++++ .../NaverLogin.imageset/NaverLogin.png | Bin 0 -> 322 bytes .../NaverLogin.imageset/NaverLogin@2x.png | Bin 0 -> 479 bytes .../NaverLogin.imageset/NaverLogin@3x.png | Bin 0 -> 602 bytes .../ImageSet/Assets/TabBarIcon/Contents.json | 6 + .../TabBarIcon/HomeTab.imageset/Contents.json | 0 .../HomeTab.imageset/bxs-home-alt-2.svg.png | Bin .../bxs-home-alt-2.svg@2x.png | Bin .../bxs-home-alt-2.svg@3x.png | Bin .../TabBarIcon/PlusTab.imageset/Contents.json | 0 .../PlusTab.imageset/bxs-plus-square.svg.png | Bin .../bxs-plus-square.svg@2x.png | Bin .../bxs-plus-square.svg@3x.png | Bin .../TrophyTab.imageset/Contents.json | 0 .../TabBarIcon/TrophyTab.imageset/Trophy.png | Bin .../TrophyTab.imageset/Trophy@2x.png | Bin .../TrophyTab.imageset/Trophy@3x.png | Bin .../ImageSet/Assets/Tutorial/Contents.json | 6 + .../SpeechBubble1.imageset/Contents.json | 0 .../SpeechBubble1.imageset/SpeechBubble1.png | Bin .../SpeechBubble1@2x.png | Bin .../SpeechBubble1@3x.png | Bin .../SpeechBubble2.imageset/Contents.json | 0 .../SpeechBubble2.imageset/SpeechBubble2.png | Bin .../SpeechBubble2@2x.png | Bin .../SpeechBubble2@3x.png | Bin .../SpeechBubble3.imageset/Contents.json | 0 .../SpeechBubble3.imageset/SpeechBubble3.png | Bin .../SpeechBubble3@2x.png | Bin .../SpeechBubble3@3x.png | Bin .../berry/BerryMap.imageset/BerryMap.png | Bin 0 -> 10340 bytes .../berry/BerryMap.imageset/BerryMap@2x.png | Bin 0 -> 24966 bytes .../berry/BerryMap.imageset/BerryMap@3x.png | Bin 0 -> 45267 bytes .../berry/BerryMap.imageset/Contents.json | 23 ++++ .../ImageSet/Assets/berry/Contents.json | 6 + .../EnrollCharacter.imageset/Contents.json | 0 .../EnrollCharacter.png | Bin .../EnrollCharacter@2x.png | Bin .../EnrollCharacter@3x.png | Bin .../LoginCharacter.imageset/Contents.json | 0 .../LoginCharacter.png | Bin .../LoginCharacter@2x.png | Bin .../LoginCharacter@3x.png | Bin .../berry}/MyIcon1.imageset/Contents.json | 0 .../berry}/MyIcon1.imageset/MyIcon1.png | Bin .../berry}/MyIcon1.imageset/MyIcon1@2x.png | Bin .../berry}/MyIcon1.imageset/MyIcon1@3x.png | Bin .../berry}/MyIcon2.imageset/Contents.json | 0 .../berry}/MyIcon2.imageset/MyIcon2.png | Bin .../berry}/MyIcon2.imageset/MyIcon2@2x.png | Bin .../berry}/MyIcon2.imageset/MyIcon2@3x.png | Bin .../berry}/MyIcon3.imageset/Contents.json | 0 .../berry}/MyIcon3.imageset/MyIcon3.png | Bin .../berry}/MyIcon3.imageset/MyIcon3@2x.png | Bin .../berry}/MyIcon3.imageset/MyIcon3@3x.png | Bin .../berry}/MyIcon4.imageset/Contents.json | 0 .../berry}/MyIcon4.imageset/MyIcon4.png | Bin .../berry}/MyIcon4.imageset/MyIcon4@2x.png | Bin .../berry}/MyIcon4.imageset/MyIcon4@3x.png | Bin .../berry}/MyIcon5.imageset/Contents.json | 0 .../berry}/MyIcon5.imageset/MyIcon5.png | Bin .../berry}/MyIcon5.imageset/MyIcon5@2x.png | Bin .../berry}/MyIcon5.imageset/MyIcon5@3x.png | Bin .../NoResultCharacter.imageset/Contents.json | 0 .../NoResultCharacter.png | Bin .../NoResultCharacter@2x.png | Bin .../NoResultCharacter@3x.png | Bin .../LaunchTitle.imageset/LaunchTitle.png | Bin 1178 -> 0 bytes .../LaunchTitle.imageset/LaunchTitle@2x.png | Bin 1893 -> 0 bytes .../LaunchTitle.imageset/LaunchTitle@3x.png | Bin 2688 -> 0 bytes .../Login/ViewController/LoginButton.swift | 80 +++++++++++++ .../ViewController/LoginViewController.swift | 107 +++++++++++------- 658 files changed, 394 insertions(+), 51 deletions(-) delete mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo.png delete mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@2x.png delete mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@3x.png rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/AllApproveCondition.imageset/AllApproveCondition.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/AllApproveCondition.imageset/AllApproveCondition@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/AllApproveCondition.imageset/AllApproveCondition@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/AllApproveCondition.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/ApproveCondition.imageset/ApproveCondition.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/ApproveCondition.imageset/ApproveCondition@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/ApproveCondition.imageset/ApproveCondition@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/ApproveCondition.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Back.imageset/Back.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Back.imageset/Back@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Back.imageset/Back@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Back.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/CheckArt.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/CheckArt.imageset/bxs-check-circle.svg.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/CheckArt.imageset/bxs-check-circle.svg@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/CheckArt.imageset/bxs-check-circle.svg@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Close.imageset/Close.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Close.imageset/Close@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Close.imageset/Close@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Close.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Challenge => Assets/Assets}/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Dots.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Dots.imageset/Dots.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Dots.imageset/Dots@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Dots.imageset/Dots@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/DownBack.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/DownBack.imageset/DownBack.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/DownBack.imageset/DownBack@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/DownBack.imageset/DownBack@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/DownSorting.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/DownSorting.imageset/DownSorting.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/DownSorting.imageset/DownSorting@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/DownSorting.imageset/DownSorting@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Edit.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Edit.imageset/Edit.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Edit.imageset/Edit@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Edit.imageset/Edit@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/EmptyFrame.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/EmptyFrame.imageset/EmptyFrame.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/EmptyFrame.imageset/EmptyFrame@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/EmptyFrame.imageset/EmptyFrame@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/ErrorArt.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/ErrorArt.imageset/bxs-error-alt.svg.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/ErrorArt.imageset/bxs-error-alt.svg@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/ErrorArt.imageset/bxs-error-alt.svg@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Flag.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Flag.imageset/Flag.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Flag.imageset/Flag@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Flag.imageset/Flag@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Frame.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Frame.imageset/Frame.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Frame.imageset/Frame@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Frame.imageset/Frame@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/HomeInfo.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/HomeInfo.imageset/HomeInfo.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/HomeInfo.imageset/HomeInfo@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/HomeInfo.imageset/HomeInfo@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/InfoCircle.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/InfoCircle.imageset/InfoCircle.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/InfoCircle.imageset/InfoCircle@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/InfoCircle.imageset/InfoCircle@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MainSearchStation.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MainSearchStation.imageset/MainSearchStation.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MainSearchStation.imageset/MainSearchStation@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MainSearchStation.imageset/MainSearchStation@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MainSearchStore.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MainSearchStore.imageset/MainSearchStore.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MainSearchStore.imageset/MainSearchStore@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MainSearchStore.imageset/MainSearchStore@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MapInfo.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MapInfo.imageset/MapInfo.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MapInfo.imageset/MapInfo@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/MapInfo.imageset/MapInfo@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Minus.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Minus.imageset/Minus.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Minus.imageset/Minus@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Minus.imageset/Minus@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/More.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/More.imageset/More.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/More.imageset/More@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/More.imageset/More@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Pencil.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Pencil.imageset/Pencil.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Pencil.imageset/Pencil@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Pencil.imageset/Pencil@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PhoneInfo.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PhoneInfo.imageset/PhoneInfo.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PhoneInfo.imageset/PhoneInfo@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PhoneInfo.imageset/PhoneInfo@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PlaceReview.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PlaceReview.imageset/PlaceComment.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PlaceReview.imageset/PlaceComment@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PlaceReview.imageset/PlaceComment@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PlaceViewMap.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PlaceViewMap.imageset/PlaceViewMap.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PlaceViewMap.imageset/PlaceViewMap@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PlaceViewMap.imageset/PlaceViewMap@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Plus.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Plus.imageset/Plus.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Plus.imageset/Plus@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Plus.imageset/Plus@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PushView.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PushView.imageset/PushView.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PushView.imageset/PushView@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/PushView.imageset/PushView@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RadioCircle.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RadioCircle.imageset/RadioCircle.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RadioCircle.imageset/RadioCircle@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RadioCircle.imageset/RadioCircle@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RadioCircleClicked.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RadioCircleClicked.imageset/RadioCircleClicked.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RadioCircleClicked.imageset/RadioCircleClicked@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RadioCircleClicked.imageset/RadioCircleClicked@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RecentlyTime.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RecentlyTime.imageset/RecentlyTime.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RecentlyTime.imageset/RecentlyTime@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RecentlyTime.imageset/RecentlyTime@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RequestCheck.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RequestCheck.imageset/RequestCheck.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RequestCheck.imageset/RequestCheck@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/RequestCheck.imageset/RequestCheck@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Search.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Search.imageset/Search.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Search.imageset/Search@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/Search.imageset/Search@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/SmallPushView.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/SmallPushView.imageset/SmallPushView.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/SmallPushView.imageset/SmallPushView@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/SmallPushView.imageset/SmallPushView@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/TimeInfo.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/TimeInfo.imageset/TimeInfo.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/TimeInfo.imageset/TimeInfo@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/TimeInfo.imageset/TimeInfo@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/X-Circle.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/X-Circle.imageset/X-Circle.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/X-Circle.imageset/X-Circle@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/X-Circle.imageset/X-Circle@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/X-Circle26.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/X-Circle26.imageset/close26.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/X-Circle26.imageset/close26@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/X-Circle26.imageset/close26@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/current-location.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/current-location.imageset/current-location.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/current-location.imageset/current-location@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/current-location.imageset/current-location@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/current-locationDisable.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/current-locationDisable.imageset/current-locationDisable.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/current-locationDisable.imageset/current-locationDisable@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/current-locationDisable.imageset/current-locationDisable@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/selectedStar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/selectedStar.imageset/selectedStar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/selectedStar.imageset/selectedStar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/selectedStar.imageset/selectedStar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/share.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/share.imageset/share.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/share.imageset/share@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/share.imageset/share@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/star.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/star.imageset/star.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/star.imageset/star@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/star.imageset/star@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/starDisable.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/starDisable.imageset/starDisable.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/starDisable.imageset/starDisable@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/starDisable.imageset/starDisable@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/user2.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/user2.imageset/user2.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/user2.imageset/user2@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Assets}/user2.imageset/user2@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoGreen.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoOrange.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/ChallengeInfoYellow.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Icon => Assets/Challenge}/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/GoldRectangle.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/GoldRectangle.imageset/GlodRectangle.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/GoldRectangle.imageset/GlodRectangle@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/GoldRectangle.imageset/GlodRectangle@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/GoldTrophy.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/GoldTrophy.imageset/GlodTrophy.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/GoldTrophy.imageset/GlodTrophy@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Challenge/GoldTrophy.imageset/GlodTrophy@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Challenge}/Point_explain.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Challenge}/Point_explain.imageset/Point_explain.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Challenge}/Point_explain.imageset/Point_explain@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Challenge}/Point_explain.imageset/Point_explain@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Icon/IconBox => Assets/Icon}/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/AllBox.imageset/Allbox.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/AllBox.imageset/Allbox@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/AllBox.imageset/Allbox@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/AllBox.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Icon/IconCell => Assets/Icon/IconBox}/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/RequestBox.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/RequestBox.imageset/Requestbox.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/RequestBox.imageset/Requestbox@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/RequestBox.imageset/Requestbox@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/SomeBox.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/SomeBox.imageset/Somebox.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/SomeBox.imageset/Somebox@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconBox/SomeBox.imageset/Somebox@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/AllCell.imageset/AllCell.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/AllCell.imageset/AllCell@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/AllCell.imageset/AllCell@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/AllCell.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Icon/IconMarker => Assets/Icon/IconCell}/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/ListCellIcon.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/ListCellIcon.imageset/ListCellIcon.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/RequestCell.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/RequestCell.imageset/RequestCell.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/RequestCell.imageset/RequestCell@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/RequestCell.imageset/RequestCell@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/SomeCell.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/SomeCell.imageset/SomeCell.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/SomeCell.imageset/SomeCell@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconCell/SomeCell.imageset/SomeCell@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/AllMap.imageset/AllMap.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/AllMap.imageset/AllMap@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/AllMap.imageset/AllMap@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/AllMap.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/AllMapClicked.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Icon/IconOptionButton => Assets/Icon/IconMarker}/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/RequestMap.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/RequestMap.imageset/RequestMap.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/RequestMap.imageset/RequestMap@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/RequestMap.imageset/RequestMap@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/RequestMapClicked.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/SomeMap.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/SomeMap.imageset/SomeMap.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/SomeMap.imageset/SomeMap@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/SomeMap.imageset/SomeMap@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/SomeMapClicked.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/AllOption.imageset/AllOption.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/AllOption.imageset/AllOption@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/AllOption.imageset/AllOption@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/AllOption.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Icon/IconStarMarker => Assets/Icon/IconOptionButton}/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/RequestOption.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/RequestOption.imageset/RequestOption.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/RequestOption.imageset/RequestOption@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/RequestOption.imageset/RequestOption@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/SomeOption.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/SomeOption.imageset/SomeOption.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/SomeOption.imageset/SomeOption@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconOptionButton/SomeOption.imageset/SomeOption@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/AllMapStar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/AllMapStarClicked.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Icon_2.0 => Assets/Icon/IconStarMarker}/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/RequestMapStar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/RequestMapStarClicked.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/SomeMapStar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/SomeMapStarClicked.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Box_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Fav.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Clicked_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Fav.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/All_Default_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_home.imageset/Btn_home.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_home.imageset/Btn_home@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_home.imageset/Btn_home@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_home.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_pencil.imageset/Btn_pencil.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_pencil.imageset/Btn_pencil@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_pencil.imageset/Btn_pencil@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_pencil.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Btn_plus_square.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Cancel_btn.imageset/Cancel_btn.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Cancel_btn.imageset/Cancel_btn@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Cancel_btn.imageset/Cancel_btn@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Cancel_btn.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Green.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Orange.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Challenge_Info_Yellow.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{LaunchScreen => Assets/Icon_2.0}/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Fav.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Fav.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Fav.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Bar.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Bread.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Coffee.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Fav.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Restaurant.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/Launch&Login}/Contents.json (100%) create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/Contents.json create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/avrioReverse.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/avrioReverse@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/avrioReverse@3x.png rename AVIRO/Resources/Assets.xcassets/ImageSet/{LaunchScreen => Assets/Launch&Login}/Launchbg.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{LaunchScreen => Assets/Launch&Login}/Launchbg.imageset/bg.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{LaunchScreen => Assets/Launch&Login}/Launchbg.imageset/bg@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{LaunchScreen => Assets/Launch&Login}/Launchbg.imageset/bg@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{LaunchScreen => Assets/Launch&Login}/aviro.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{LaunchScreen => Assets/Launch&Login}/aviro.imageset/aviro.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{LaunchScreen => Assets/Launch&Login}/aviro.imageset/aviro@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{LaunchScreen => Assets/Launch&Login}/aviro.imageset/aviro@3x.png (100%) create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/Contents.json create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse@3x.png rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 1.imageset/Contents 1.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 1.imageset/Contents 1@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 1.imageset/Contents 1@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 1.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 2.imageset/Contents 2.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 2.imageset/Contents 2@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 2.imageset/Contents 2@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 2.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 3.imageset/Contents 3.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 3.imageset/Contents 3@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 3.imageset/Contents 3@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 3.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 4.imageset/Contents 4.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 4.imageset/Contents 4@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 4.imageset/Contents 4@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents 4.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/Screen/Contents.json (100%) create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Apple.imageset/Apple.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Apple.imageset/Apple@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Apple.imageset/Apple@3x.png rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{AppleLogo.imageset => SocialMedia/Apple.imageset}/Contents.json (70%) create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/AppleLogin.imageset/AppleLogin.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/AppleLogin.imageset/AppleLogin@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/AppleLogin.imageset/AppleLogin@3x.png rename AVIRO/Resources/Assets.xcassets/ImageSet/{LaunchScreen/LaunchTitle.imageset => Assets/SocialMedia/AppleLogin.imageset}/Contents.json (69%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{TabBarIcon => Assets/SocialMedia}/Contents.json (100%) create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Google.imageset/Contents.json create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Google.imageset/Google.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Google.imageset/Google@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Google.imageset/Google@3x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/Contents.json create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/GoogleLogin.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/GoogleLogin@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/GoogleLogin@3x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Contents.json create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Kakao.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Kakao@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Kakao@3x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/KakaoLogin.imageset/Contents.json create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/KakaoLogin.imageset/KakaoLogin.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/KakaoLogin.imageset/KakaoLogin@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/KakaoLogin.imageset/KakaoLogin@3x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Contents.json create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Naver.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Naver@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Naver@3x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/NaverLogin.imageset/Contents.json create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/NaverLogin.imageset/NaverLogin.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/NaverLogin.imageset/NaverLogin@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/NaverLogin.imageset/NaverLogin@3x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TabBarIcon/Contents.json rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/HomeTab.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/HomeTab.imageset/bxs-home-alt-2.svg@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/PlusTab.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/PlusTab.imageset/bxs-plus-square.svg@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/TrophyTab.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/TrophyTab.imageset/Trophy.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/TrophyTab.imageset/Trophy@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{ => Assets}/TabBarIcon/TrophyTab.imageset/Trophy@3x.png (100%) create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Tutorial/Contents.json rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble1.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble1.imageset/SpeechBubble1.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble1.imageset/SpeechBubble1@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble1.imageset/SpeechBubble1@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble2.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble2.imageset/SpeechBubble2.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble2.imageset/SpeechBubble2@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble2.imageset/SpeechBubble2@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble3.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble3.imageset/SpeechBubble3.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble3.imageset/SpeechBubble3@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/{ => Tutorial}/SpeechBubble3.imageset/SpeechBubble3@3x.png (100%) create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/BerryMap.imageset/BerryMap.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/BerryMap.imageset/BerryMap@2x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/BerryMap.imageset/BerryMap@3x.png create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/BerryMap.imageset/Contents.json create mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/Contents.json rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/EnrollCharacter.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/EnrollCharacter.imageset/EnrollCharacter.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/EnrollCharacter.imageset/EnrollCharacter@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/EnrollCharacter.imageset/EnrollCharacter@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/LoginCharacter.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/LoginCharacter.imageset/LoginCharacter.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/LoginCharacter.imageset/LoginCharacter@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/LoginCharacter.imageset/LoginCharacter@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon1.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon1.imageset/MyIcon1.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon1.imageset/MyIcon1@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon1.imageset/MyIcon1@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon2.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon2.imageset/MyIcon2.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon2.imageset/MyIcon2@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon2.imageset/MyIcon2@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon3.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon3.imageset/MyIcon3.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon3.imageset/MyIcon3@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon3.imageset/MyIcon3@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon4.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon4.imageset/MyIcon4.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon4.imageset/MyIcon4@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon4.imageset/MyIcon4@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon5.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon5.imageset/MyIcon5.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon5.imageset/MyIcon5@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/MyIcon5.imageset/MyIcon5@3x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/NoResultCharacter.imageset/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/NoResultCharacter.imageset/NoResultCharacter.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/NoResultCharacter.imageset/NoResultCharacter@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/{Main => Assets/berry}/NoResultCharacter.imageset/NoResultCharacter@3x.png (100%) delete mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle.png delete mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@2x.png delete mode 100644 AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@3x.png create mode 100644 AVIRO/Scene/Feature/Login/ViewController/LoginButton.swift diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index b935bb5a..565795b6 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -96,6 +96,7 @@ C52FA34C2A175B20005E70DC /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C52FA34B2A175B20005E70DC /* Assets.xcassets */; }; C52FA34F2A175B20005E70DC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C52FA34D2A175B20005E70DC /* LaunchScreen.storyboard */; }; C534B14E2C2EABE900C62FDA /* LoginInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C534B14D2C2EABE900C62FDA /* LoginInfo.swift */; }; + C534B1522C32662A00C62FDA /* LoginButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C534B1512C32662A00C62FDA /* LoginButton.swift */; }; C5351B4D2A19223300116D50 /* KakaoMapRequestAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5351B4C2A19223300116D50 /* KakaoMapRequestAPI.swift */; }; C5351B502A19225A00116D50 /* KakaoKeywordPlace+DTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5351B4F2A19225A00116D50 /* KakaoKeywordPlace+DTO.swift */; }; C5351B542A19A7B100116D50 /* UserCoordinate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5351B532A19A7B100116D50 /* UserCoordinate.swift */; }; @@ -428,6 +429,7 @@ C52FA34B2A175B20005E70DC /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; C52FA3502A175B20005E70DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; C534B14D2C2EABE900C62FDA /* LoginInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginInfo.swift; sourceTree = ""; }; + C534B1512C32662A00C62FDA /* LoginButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginButton.swift; sourceTree = ""; }; C5351B4A2A1919F700116D50 /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = ""; }; C5351B4C2A19223300116D50 /* KakaoMapRequestAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KakaoMapRequestAPI.swift; sourceTree = ""; }; C5351B4F2A19225A00116D50 /* KakaoKeywordPlace+DTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KakaoKeywordPlace+DTO.swift"; sourceTree = ""; }; @@ -1216,6 +1218,7 @@ isa = PBXGroup; children = ( C5A3C3C32A39658A0050AB3D /* LoginViewController.swift */, + C534B1512C32662A00C62FDA /* LoginButton.swift */, ); path = ViewController; sourceTree = ""; @@ -2967,6 +2970,7 @@ C52FA3472A175B20005E70DC /* HomeViewController.swift in Sources */, C5503B5C2B9F54C20050643F /* WelcomeCollectionViewCell.swift in Sources */, C5FD92E32A9C6C1E00CF4673 /* EditLocationAddressTextTableViewCell.swift in Sources */, + C534B1522C32662A00C62FDA /* LoginButton.swift in Sources */, C54BC0DB2A2C2D0D00B65439 /* UIColor+Extension.swift in Sources */, C52FA3432A175B20005E70DC /* AppDelegate.swift in Sources */, C5BA9DCF2BE8ABA8004FA06E /* NetworkConfigurable.swift in Sources */, diff --git a/AVIRO/App/AppController.swift b/AVIRO/App/AppController.swift index 863e8006..f1641ac3 100644 --- a/AVIRO/App/AppController.swift +++ b/AVIRO/App/AppController.swift @@ -31,9 +31,8 @@ final class AppController { self.window = window window.backgroundColor = .gray7 - setTabBarView() -// checkState() - +// setTabBarView() + checkState() } func setupLoginViewAfterLogout(in window: UIWindow, with type: LoginViewToastType) { diff --git a/AVIRO/Custom/Constants/UIImage+Extension.swift b/AVIRO/Custom/Constants/UIImage+Extension.swift index 435c3e4c..9eefe3f0 100644 --- a/AVIRO/Custom/Constants/UIImage+Extension.swift +++ b/AVIRO/Custom/Constants/UIImage+Extension.swift @@ -12,6 +12,7 @@ extension UIImage { static let launchtitle = UIImage(named: "LaunchTitle")! static let launchBG = UIImage(named: "Launchbg")! static let launchAVIRO = UIImage(named: "aviro")! + static let aviroReverse = UIImage(named: "aviroReverse")! // MARK: - Screen Shot static let screen1 = UIImage(named: "Contents 1") @@ -23,6 +24,7 @@ extension UIImage { static let loginCharacter = UIImage(named: "LoginCharacter")! static let enrollCharacter = UIImage(named: "EnrollCharacter")! static let noResultCharacter = UIImage(named: "NoResultCharacter")! + static let berryMap = UIImage(named: "BerryMap")! static let myIcon1 = UIImage(named: "MyIcon1") static let myIcon2 = UIImage(named: "MyIcon2") @@ -130,7 +132,15 @@ extension UIImage { static let tropyTab = UIImage(named: "TrophyTab")! // MARK: Assets Img - static let apple = UIImage(named: "AppleLogo")! + static let appleLogin = UIImage(named: "AppleLogin")! + static let googleLogin = UIImage(named: "GoogleLogin")! + static let kakaoLogin = UIImage(named: "KakaoLogin")! + static let naverLogin = UIImage(named: "NaverLogin")! + + static let appleLogo = UIImage(named: "Apple")! + static let googleLogo = UIImage(named: "Google")! + static let kakaoLogo = UIImage(named: "Kakao")! + static let naverLogo = UIImage(named: "Naver")! static let back = UIImage(named: "Back")! static let downBack = UIImage(named: "DownBack")! diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo.png deleted file mode 100644 index b3f1f52c844800c70d425c7329a600041a53db6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAIoCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{tZtT$B+ufw^JH94;hHKtoOShXw{^g!s7md zZI|O~wz~)N7D!*=En(i=c=y3?=b)A_Z@mD=7tQ_;70O%x$ZYt;?Q-PBoDCvbah=Z_ zRRbP7-ILkCk`>e5p!Us2EHUfL=BqDD*Eya$JYzxpCY{X*fuCcRPuBFSuDhVUVaHj) zzG)xj3607bg!szV4O@ax$z!PC6Ff5(M|}(@EcM;M2$bs%3eKQQNds z4{dMT8v=@|K?3#W+ds;m-V*l8a{i2_lKiw4CE+dK7fAnT+OleE#82(GPM52<;>5OB Q0R70|>FVdQ&MBb@0L*uN0RR91 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@2x.png deleted file mode 100644 index 1470d0bc67baf78b75c7290db348f612c781e1d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 494 zcmV>J%zoSuI(KHxf{ zFMY5Ta_|8R^>ombAprg7>+K(gYyOmU%P)sn&}1ms+&4(0eRbX}7K;yPVqAq0&jN%} zXQG9kcL>cX#2bWCL(EcYh)?Lbh0vTrh$~-e2=Tg&;4X)vAgLk56(rJAj>B#bU9D|B zwXft1|KXqf;InNBEgb${<`8{?OU{W`fWKgwXx%op4c1c+Ns}W9qR23!(0yr z99}LCoL=7Ne*XT(Dz(Nn*e|}j5X5jO1pS46J6scgzJR#Fy0@k#(09r6>Xz@VDTWWz kM)qx3($jubRn`CW1)4??59%`&3;+NC07*qoM6N<$f*QNjzyJUM diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AppleLogo.imageset/AppleLogo@3x.png deleted file mode 100644 index 0573e1c7cc3638064bd9b8fcad1aff86e63062f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 797 zcmV+&1LFLNP)vO&@b+D>3I0bv5037QRrR9_DLNbJ;Cwv|}V zIr>qz^|^ViE9*)M;5d%sIF92uV}yvNa9+Z~EZDBt?#1BzhXqO4GJ1-O^bZ!}bMTz! z{DSi!(2@?b#@Gq*r;ZDZ8F_QD6*U4C7&{HyOh_?y8oVgO*lCDG1zUn1c>|lw4_x1} zeVj}tC3?iFNXfIGcWf&b=R@BD32$K&5v2@v$F^Z{b{L2WdV;FMsBEJoTzU|KKm4}E zJ;WX#Zsi`^A-qh55QMXaK)kLC#^E0FH}_OeaZ;%PFLvG_&OS1>%OJ`HRk>1=FsCUN zFYqhbUjZWvp_HAg zY`5S=mP!}VTkJ7f+id|`tTYo#El-lt#R4{vEPe(>&e4-rP$pU=_M!!BkwX~`PqNfS z-F0!u)etFx9geOjyoPi0q)xC}nQTiZ4@^U(!77G(NYDZ2CeoBT=%k#RNJ0u_qBCxT z=Qev8cgRaj#U*}lmrz9O?Uut9OBQMlCA38P30p`iaHAE(wM4pwJrcHzEOkw&ehOr0 z))e7Yni=;s?2@vzo{CfJmQdA#wmc0xYg-{u^Q17)ki#Z-CR$1X^{Su}KM;YcNc^;N z*z=}5tgAKZqc>#lm@=D0Rx8!(Nnt@&w%x`|b8;V4eWgL|XwZTZN*&xTE0dov?7{bo zwGQqJ!UDfx7*?^tx>tDHeW!leK$%_!OGPMDQzyr;#naYMg5x{H*X%(lPL&3aD#Gul z2mV(IX(`noqN5VVI(i#X7O2Xhq-yvcRZ#!KcKe$6K~-B_>|MC@8w1aIJC5Txj^j9v b<8;hl6=my}YJr9D00000NkvXXu0mjftjb#T diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/AllApproveCondition.imageset/AllApproveCondition.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/AllApproveCondition.imageset/AllApproveCondition.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/AllApproveCondition.imageset/AllApproveCondition@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/AllApproveCondition.imageset/AllApproveCondition@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/AllApproveCondition.imageset/AllApproveCondition@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/AllApproveCondition@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/AllApproveCondition.imageset/AllApproveCondition@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/AllApproveCondition.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/AllApproveCondition.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/AllApproveCondition.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ApproveCondition.imageset/ApproveCondition.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ApproveCondition.imageset/ApproveCondition.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ApproveCondition.imageset/ApproveCondition@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ApproveCondition.imageset/ApproveCondition@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ApproveCondition.imageset/ApproveCondition@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/ApproveCondition@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ApproveCondition.imageset/ApproveCondition@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ApproveCondition.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ApproveCondition.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ApproveCondition.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Back.imageset/Back.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Back.imageset/Back.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Back.imageset/Back@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Back.imageset/Back@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Back.imageset/Back@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Back@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Back.imageset/Back@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Back.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Back.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Back.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/CheckArt.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/CheckArt.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/CheckArt.imageset/bxs-check-circle.svg.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/CheckArt.imageset/bxs-check-circle.svg.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/CheckArt.imageset/bxs-check-circle.svg@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/CheckArt.imageset/bxs-check-circle.svg@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/CheckArt.imageset/bxs-check-circle.svg@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/CheckArt.imageset/bxs-check-circle.svg@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/CheckArt.imageset/bxs-check-circle.svg@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Close.imageset/Close.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Close.imageset/Close.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Close.imageset/Close@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Close.imageset/Close@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Close.imageset/Close@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Close@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Close.imageset/Close@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Close.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Close.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Close.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Dots.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Dots.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Dots.imageset/Dots.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Dots.imageset/Dots.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Dots.imageset/Dots@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Dots.imageset/Dots@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Dots.imageset/Dots@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Dots.imageset/Dots@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Dots.imageset/Dots@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownBack.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownBack.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownBack.imageset/DownBack.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownBack.imageset/DownBack.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownBack.imageset/DownBack@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownBack.imageset/DownBack@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownBack.imageset/DownBack@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownBack.imageset/DownBack@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownBack.imageset/DownBack@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownSorting.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownSorting.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownSorting.imageset/DownSorting.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownSorting.imageset/DownSorting.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownSorting.imageset/DownSorting@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownSorting.imageset/DownSorting@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownSorting.imageset/DownSorting@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/DownSorting.imageset/DownSorting@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/DownSorting.imageset/DownSorting@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Edit.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Edit.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Edit.imageset/Edit.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Edit.imageset/Edit.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Edit.imageset/Edit@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Edit.imageset/Edit@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Edit.imageset/Edit@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Edit.imageset/Edit@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Edit.imageset/Edit@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/EmptyFrame.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/EmptyFrame.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/EmptyFrame.imageset/EmptyFrame.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/EmptyFrame.imageset/EmptyFrame.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/EmptyFrame.imageset/EmptyFrame@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/EmptyFrame.imageset/EmptyFrame@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/EmptyFrame.imageset/EmptyFrame@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/EmptyFrame.imageset/EmptyFrame@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/EmptyFrame.imageset/EmptyFrame@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ErrorArt.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ErrorArt.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ErrorArt.imageset/bxs-error-alt.svg.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ErrorArt.imageset/bxs-error-alt.svg.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ErrorArt.imageset/bxs-error-alt.svg@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ErrorArt.imageset/bxs-error-alt.svg@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ErrorArt.imageset/bxs-error-alt.svg@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/ErrorArt.imageset/bxs-error-alt.svg@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/ErrorArt.imageset/bxs-error-alt.svg@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Flag.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Flag.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Flag.imageset/Flag.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Flag.imageset/Flag.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Flag.imageset/Flag@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Flag.imageset/Flag@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Flag.imageset/Flag@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Flag.imageset/Flag@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Flag.imageset/Flag@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Frame.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Frame.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Frame.imageset/Frame.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Frame.imageset/Frame.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Frame.imageset/Frame@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Frame.imageset/Frame@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Frame.imageset/Frame@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Frame.imageset/Frame@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Frame.imageset/Frame@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/HomeInfo.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/HomeInfo.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/HomeInfo.imageset/HomeInfo.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/HomeInfo.imageset/HomeInfo.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/HomeInfo.imageset/HomeInfo@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/HomeInfo.imageset/HomeInfo@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/HomeInfo.imageset/HomeInfo@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/HomeInfo.imageset/HomeInfo@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/HomeInfo.imageset/HomeInfo@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/InfoCircle.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/InfoCircle.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/InfoCircle.imageset/InfoCircle.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/InfoCircle.imageset/InfoCircle.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/InfoCircle.imageset/InfoCircle@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/InfoCircle.imageset/InfoCircle@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/InfoCircle.imageset/InfoCircle@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/InfoCircle.imageset/InfoCircle@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/InfoCircle.imageset/InfoCircle@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStation.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStation.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStation.imageset/MainSearchStation.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStation.imageset/MainSearchStation.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStation.imageset/MainSearchStation@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStation.imageset/MainSearchStation@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStation.imageset/MainSearchStation@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStation.imageset/MainSearchStation@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStation.imageset/MainSearchStation@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStore.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStore.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStore.imageset/MainSearchStore.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStore.imageset/MainSearchStore.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStore.imageset/MainSearchStore@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStore.imageset/MainSearchStore@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStore.imageset/MainSearchStore@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MainSearchStore.imageset/MainSearchStore@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MainSearchStore.imageset/MainSearchStore@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MapInfo.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MapInfo.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MapInfo.imageset/MapInfo.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MapInfo.imageset/MapInfo.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MapInfo.imageset/MapInfo@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MapInfo.imageset/MapInfo@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MapInfo.imageset/MapInfo@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/MapInfo.imageset/MapInfo@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/MapInfo.imageset/MapInfo@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Minus.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Minus.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Minus.imageset/Minus.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Minus.imageset/Minus.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Minus.imageset/Minus@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Minus.imageset/Minus@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Minus.imageset/Minus@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Minus.imageset/Minus@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Minus.imageset/Minus@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/More.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/More.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/More.imageset/More.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/More.imageset/More.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/More.imageset/More@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/More.imageset/More@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/More.imageset/More@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/More.imageset/More@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/More.imageset/More@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Pencil.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Pencil.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Pencil.imageset/Pencil.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Pencil.imageset/Pencil.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Pencil.imageset/Pencil@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Pencil.imageset/Pencil@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Pencil.imageset/Pencil@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Pencil.imageset/Pencil@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Pencil.imageset/Pencil@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PhoneInfo.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PhoneInfo.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PhoneInfo.imageset/PhoneInfo.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PhoneInfo.imageset/PhoneInfo.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PhoneInfo.imageset/PhoneInfo@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PhoneInfo.imageset/PhoneInfo@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PhoneInfo.imageset/PhoneInfo@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PhoneInfo.imageset/PhoneInfo@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PhoneInfo.imageset/PhoneInfo@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceReview.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceReview.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceReview.imageset/PlaceComment.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceReview.imageset/PlaceComment.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceReview.imageset/PlaceComment@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceReview.imageset/PlaceComment@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceReview.imageset/PlaceComment@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceReview.imageset/PlaceComment@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceReview.imageset/PlaceComment@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceViewMap.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceViewMap.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceViewMap.imageset/PlaceViewMap.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceViewMap.imageset/PlaceViewMap.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceViewMap.imageset/PlaceViewMap@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceViewMap.imageset/PlaceViewMap@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceViewMap.imageset/PlaceViewMap@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PlaceViewMap.imageset/PlaceViewMap@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PlaceViewMap.imageset/PlaceViewMap@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Plus.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Plus.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Plus.imageset/Plus.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Plus.imageset/Plus.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Plus.imageset/Plus@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Plus.imageset/Plus@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Plus.imageset/Plus@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Plus.imageset/Plus@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Plus.imageset/Plus@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PushView.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PushView.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PushView.imageset/PushView.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PushView.imageset/PushView.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PushView.imageset/PushView@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PushView.imageset/PushView@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PushView.imageset/PushView@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/PushView.imageset/PushView@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/PushView.imageset/PushView@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircle.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircle.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircle.imageset/RadioCircle.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircle.imageset/RadioCircle.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircle.imageset/RadioCircle@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircle.imageset/RadioCircle@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircle.imageset/RadioCircle@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircle.imageset/RadioCircle@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircle.imageset/RadioCircle@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircleClicked.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircleClicked.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircleClicked.imageset/RadioCircleClicked.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircleClicked.imageset/RadioCircleClicked.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircleClicked.imageset/RadioCircleClicked@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircleClicked.imageset/RadioCircleClicked@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircleClicked.imageset/RadioCircleClicked@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RadioCircleClicked.imageset/RadioCircleClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RadioCircleClicked.imageset/RadioCircleClicked@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RecentlyTime.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RecentlyTime.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RecentlyTime.imageset/RecentlyTime.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RecentlyTime.imageset/RecentlyTime.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RecentlyTime.imageset/RecentlyTime@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RecentlyTime.imageset/RecentlyTime@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RecentlyTime.imageset/RecentlyTime@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RecentlyTime.imageset/RecentlyTime@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RecentlyTime.imageset/RecentlyTime@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RequestCheck.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RequestCheck.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RequestCheck.imageset/RequestCheck.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RequestCheck.imageset/RequestCheck.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RequestCheck.imageset/RequestCheck@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RequestCheck.imageset/RequestCheck@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RequestCheck.imageset/RequestCheck@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/RequestCheck.imageset/RequestCheck@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/RequestCheck.imageset/RequestCheck@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Search.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Search.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Search.imageset/Search.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Search.imageset/Search.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Search.imageset/Search@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Search.imageset/Search@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Search.imageset/Search@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Search.imageset/Search@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/Search.imageset/Search@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/SmallPushView.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/SmallPushView.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/SmallPushView.imageset/SmallPushView.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/SmallPushView.imageset/SmallPushView.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/SmallPushView.imageset/SmallPushView@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/SmallPushView.imageset/SmallPushView@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/SmallPushView.imageset/SmallPushView@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SmallPushView.imageset/SmallPushView@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/SmallPushView.imageset/SmallPushView@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/TimeInfo.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/TimeInfo.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/TimeInfo.imageset/TimeInfo.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/TimeInfo.imageset/TimeInfo.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/TimeInfo.imageset/TimeInfo@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/TimeInfo.imageset/TimeInfo@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/TimeInfo.imageset/TimeInfo@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/TimeInfo.imageset/TimeInfo@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/TimeInfo.imageset/TimeInfo@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle.imageset/X-Circle.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle.imageset/X-Circle.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle.imageset/X-Circle@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle.imageset/X-Circle@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle.imageset/X-Circle@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle.imageset/X-Circle@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle.imageset/X-Circle@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle26.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle26.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle26.imageset/close26.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle26.imageset/close26.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle26.imageset/close26@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle26.imageset/close26@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle26.imageset/close26@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/X-Circle26.imageset/close26@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/X-Circle26.imageset/close26@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-location.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-location.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-location.imageset/current-location.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-location.imageset/current-location.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-location.imageset/current-location@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-location.imageset/current-location@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-location.imageset/current-location@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-location.imageset/current-location@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-location.imageset/current-location@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-locationDisable.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-locationDisable.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-locationDisable.imageset/current-locationDisable.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-locationDisable.imageset/current-locationDisable.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-locationDisable.imageset/current-locationDisable@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-locationDisable.imageset/current-locationDisable@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-locationDisable.imageset/current-locationDisable@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/current-locationDisable.imageset/current-locationDisable@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/current-locationDisable.imageset/current-locationDisable@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/selectedStar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/selectedStar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/selectedStar.imageset/selectedStar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/selectedStar.imageset/selectedStar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/selectedStar.imageset/selectedStar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/selectedStar.imageset/selectedStar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/selectedStar.imageset/selectedStar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/selectedStar.imageset/selectedStar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/selectedStar.imageset/selectedStar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/share.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/share.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/share.imageset/share.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/share.imageset/share.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/share.imageset/share@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/share.imageset/share@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/share.imageset/share@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/share.imageset/share@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/share.imageset/share@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/star.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/star.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/star.imageset/star.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/star.imageset/star.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/star.imageset/star@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/star.imageset/star@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/star.imageset/star@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/star.imageset/star@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/star.imageset/star@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/starDisable.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/starDisable.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/starDisable.imageset/starDisable.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/starDisable.imageset/starDisable.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/starDisable.imageset/starDisable@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/starDisable.imageset/starDisable@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/starDisable.imageset/starDisable@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/starDisable.imageset/starDisable@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/starDisable.imageset/starDisable@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/user2.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/user2.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/user2.imageset/user2.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/user2.imageset/user2.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/user2.imageset/user2@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/user2.imageset/user2@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/user2.imageset/user2@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/user2.imageset/user2@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Assets/user2.imageset/user2@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoGreen.imageset/ChallengeInfoGreen@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoGreen.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoGreen.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoGreen.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoOrange.imageset/ChallengeInfoOrange@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoOrange.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoOrange.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoOrange.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoYellow.imageset/ChallengeInfoYellow@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoYellow.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/ChallengeInfoYellow.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/ChallengeInfoYellow.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldRectangle.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldRectangle.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldRectangle.imageset/GlodRectangle.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldRectangle.imageset/GlodRectangle.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldRectangle.imageset/GlodRectangle@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldRectangle.imageset/GlodRectangle@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldRectangle.imageset/GlodRectangle@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldRectangle.imageset/GlodRectangle@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldRectangle.imageset/GlodRectangle@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldTrophy.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldTrophy.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldTrophy.imageset/GlodTrophy.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldTrophy.imageset/GlodTrophy.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldTrophy.imageset/GlodTrophy@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldTrophy.imageset/GlodTrophy@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldTrophy.imageset/GlodTrophy@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Challenge/GoldTrophy.imageset/GlodTrophy@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/GoldTrophy.imageset/GlodTrophy@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/Point_explain.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/Point_explain.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/Point_explain.imageset/Point_explain.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/Point_explain.imageset/Point_explain.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/Point_explain.imageset/Point_explain@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/Point_explain.imageset/Point_explain@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/Point_explain.imageset/Point_explain@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Point_explain.imageset/Point_explain@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Challenge/Point_explain.imageset/Point_explain@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/AllBox.imageset/Allbox.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/AllBox.imageset/Allbox.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/AllBox.imageset/Allbox@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/AllBox.imageset/Allbox@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/AllBox.imageset/Allbox@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Allbox@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/AllBox.imageset/Allbox@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/AllBox.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/AllBox.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/AllBox.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/RequestBox.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/RequestBox.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/RequestBox.imageset/Requestbox.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/RequestBox.imageset/Requestbox.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/RequestBox.imageset/Requestbox@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/RequestBox.imageset/Requestbox@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/RequestBox.imageset/Requestbox@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/RequestBox.imageset/Requestbox@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/RequestBox.imageset/Requestbox@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/SomeBox.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/SomeBox.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/SomeBox.imageset/Somebox.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/SomeBox.imageset/Somebox.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/SomeBox.imageset/Somebox@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/SomeBox.imageset/Somebox@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/SomeBox.imageset/Somebox@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconBox/SomeBox.imageset/Somebox@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconBox/SomeBox.imageset/Somebox@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/AllCell.imageset/AllCell.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/AllCell.imageset/AllCell.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/AllCell.imageset/AllCell@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/AllCell.imageset/AllCell@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/AllCell.imageset/AllCell@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/AllCell@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/AllCell.imageset/AllCell@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/AllCell.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/AllCell.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/AllCell.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/ListCellIcon.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/ListCellIcon.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/ListCellIcon.imageset/ListCellIcon.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/ListCellIcon.imageset/ListCellIcon.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/ListCellIcon.imageset/ListCellIcon@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/RequestCell.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/RequestCell.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/RequestCell.imageset/RequestCell.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/RequestCell.imageset/RequestCell.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/RequestCell.imageset/RequestCell@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/RequestCell.imageset/RequestCell@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/RequestCell.imageset/RequestCell@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/RequestCell.imageset/RequestCell@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/RequestCell.imageset/RequestCell@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/SomeCell.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/SomeCell.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/SomeCell.imageset/SomeCell.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/SomeCell.imageset/SomeCell.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/SomeCell.imageset/SomeCell@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/SomeCell.imageset/SomeCell@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/SomeCell.imageset/SomeCell@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconCell/SomeCell.imageset/SomeCell@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconCell/SomeCell.imageset/SomeCell@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMap.imageset/AllMap.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMap.imageset/AllMap.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMap.imageset/AllMap@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMap.imageset/AllMap@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMap.imageset/AllMap@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/AllMap@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMap.imageset/AllMap@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMap.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMap.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMap.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMapClicked.imageset/AllMapClicked@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMapClicked.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/AllMapClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/AllMapClicked.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMap.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMap.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMap.imageset/RequestMap.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMap.imageset/RequestMap.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMap.imageset/RequestMap@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMap.imageset/RequestMap@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMap.imageset/RequestMap@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMap.imageset/RequestMap@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMap.imageset/RequestMap@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMapClicked.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMapClicked.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/RequestMapClicked.imageset/RequestMapClicked@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMap.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMap.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMap.imageset/SomeMap.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMap.imageset/SomeMap.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMap.imageset/SomeMap@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMap.imageset/SomeMap@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMap.imageset/SomeMap@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMap.imageset/SomeMap@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMap.imageset/SomeMap@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMapClicked.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMapClicked.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconMarker/SomeMapClicked.imageset/SomeMapClicked@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/AllOption.imageset/AllOption.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/AllOption.imageset/AllOption.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/AllOption.imageset/AllOption@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/AllOption.imageset/AllOption@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/AllOption.imageset/AllOption@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/AllOption@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/AllOption.imageset/AllOption@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/AllOption.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/AllOption.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/AllOption.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/RequestOption.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/RequestOption.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/RequestOption.imageset/RequestOption.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/RequestOption.imageset/RequestOption.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/RequestOption.imageset/RequestOption@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/RequestOption.imageset/RequestOption@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/RequestOption.imageset/RequestOption@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/RequestOption.imageset/RequestOption@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/RequestOption.imageset/RequestOption@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/SomeOption.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/SomeOption.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/SomeOption.imageset/SomeOption.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/SomeOption.imageset/SomeOption.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/SomeOption.imageset/SomeOption@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/SomeOption.imageset/SomeOption@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/SomeOption.imageset/SomeOption@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconOptionButton/SomeOption.imageset/SomeOption@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconOptionButton/SomeOption.imageset/SomeOption@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStar.imageset/AllMapStar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStarClicked.imageset/AllMapStarClicked@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStarClicked.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/AllMapStarClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/AllMapStarClicked.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStar.imageset/RequestMapStar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStarClicked.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStarClicked.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/RequestMapStarClicked.imageset/RequestMapStarClicked@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStar.imageset/SomeMapStar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStarClicked.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStarClicked.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon/IconStarMarker/SomeMapStarClicked.imageset/SomeMapStarClicked@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bar.imageset/All_Box_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bread.imageset/All_Box_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Coffee.imageset/All_Box_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Restaurant.imageset/All_Box_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Box_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Box_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bar.imageset/All_Clicked_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bread.imageset/All_Clicked_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Coffee.imageset/All_Clicked_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Fav.imageset/All_Clicked_Fav@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Fav.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Restaurant.imageset/All_Clicked_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Clicked_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Clicked_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bar.imageset/All_Default_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bread.imageset/All_Default_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Coffee.imageset/All_Default_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Fav.imageset/All_Default_Fav@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Fav.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Restaurant.imageset/All_Default_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/All_Default_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/All_Default_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_home.imageset/Btn_home.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_home.imageset/Btn_home.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_home.imageset/Btn_home@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_home.imageset/Btn_home@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_home.imageset/Btn_home@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Btn_home@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_home.imageset/Btn_home@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_home.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_home.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_home.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_pencil.imageset/Btn_pencil.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_pencil.imageset/Btn_pencil.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_pencil.imageset/Btn_pencil@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_pencil.imageset/Btn_pencil@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_pencil.imageset/Btn_pencil@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Btn_pencil@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_pencil.imageset/Btn_pencil@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_pencil.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_pencil.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_pencil.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_plus_square.imageset/Btn_plus_square@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_plus_square.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Btn_plus_square.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Btn_plus_square.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Cancel_btn.imageset/Cancel_btn.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Cancel_btn.imageset/Cancel_btn.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Cancel_btn.imageset/Cancel_btn@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Cancel_btn.imageset/Cancel_btn@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Cancel_btn.imageset/Cancel_btn@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Cancel_btn@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Cancel_btn.imageset/Cancel_btn@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Cancel_btn.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Cancel_btn.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Cancel_btn.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Green.imageset/Challenge_Info_Green@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Green.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Green.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Green.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Orange.imageset/Challenge_Info_Orange@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Orange.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Orange.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Orange.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Yellow.imageset/Challenge_Info_Yellow@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Yellow.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Challenge_Info_Yellow.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Challenge_Info_Yellow.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bar.imageset/Default_btn_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Bread.imageset/Default_btn_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Coffee.imageset/Default_btn_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Default_btn_Restaurant.imageset/Default_btn_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bar.imageset/On_btn_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Bread.imageset/On_btn_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Coffee.imageset/On_btn_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/On_btn_Restaurant.imageset/On_btn_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bar.imageset/Request_Box_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Bread.imageset/Request_Box_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Coffee.imageset/Request_Box_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Box_Restaurant.imageset/Request_Box_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bar.imageset/Request_Clicked_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Bread.imageset/Request_Clicked_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Coffee.imageset/Request_Clicked_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Fav.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Fav.imageset/Request_Clicked_Fav@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Clicked_Restaurant.imageset/Request_Clicked_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bar.imageset/Request_Default_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Bread.imageset/Request_Default_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Coffee.imageset/Request_Default_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Fav.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Fav.imageset/Request_Default_Fav@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Request_Default_Restaurant.imageset/Request_Default_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bar.imageset/Some_Box_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Bread.imageset/Some_Box_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Coffee.imageset/Some_Box_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Box_Restaurant.imageset/Some_Box_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bar.imageset/Some_Clicked_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Bread.imageset/Some_Clicked_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Coffee.imageset/Some_Clicked_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Fav.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Fav.imageset/Some_Clicked_Fav@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Clicked_Restaurant.imageset/Some_Clicked_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bar.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bar.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bar.imageset/Some_Default_Bar@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bread.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bread.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Bread.imageset/Some_Default_Bread@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Coffee.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Coffee.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Coffee.imageset/Some_Default_Coffee@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Fav.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Fav.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Fav.imageset/Some_Default_Fav@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Restaurant.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Restaurant.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Icon_2.0/Some_Default_Restaurant.imageset/Some_Default_Restaurant@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/Contents.json new file mode 100644 index 00000000..2832d626 --- /dev/null +++ b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "avrioReverse.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "avrioReverse@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "avrioReverse@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/avrioReverse.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/avrioReverse.png new file mode 100644 index 0000000000000000000000000000000000000000..24605889f0ccd73fffac4f428194af117b22ea4b GIT binary patch literal 3756 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 BbC3W4 literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/avrioReverse@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/LaunchTitle.imageset/avrioReverse@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a044861c9d65a9b9f481c99d3c296ed87d3a97f1 GIT binary patch literal 10012 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 BbC3W4 literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a044861c9d65a9b9f481c99d3c296ed87d3a97f1 GIT binary patch literal 10012 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 Q4fG^~r>mdKI;Vst0MTD~q5uE@ literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Apple.imageset/Apple@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Apple.imageset/Apple@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5cab1d19998a960f04a37b72831569292efe78e1 GIT binary patch literal 512 zcmV+b0{{JqP)O` z!!QtrKVX5ffk)^F-T)qX^ayOwZa_Ea2*3nogTe&qBX5)mO032zZ3=PS+%=Z`Nxzhb zi}Ig!Iok(?%W}hI7}a`co{nTk$-+~wEE{A`zzkFuJzWur-uLd zgmzyKdS=`A1EwS1%Xcb=0=C1*Va->Ou|X3Au_u~I)f16i6OTb}^Z7;qZ(d{d9Re6o zF+W8J2jb={5{Uf=?vUq|1Y#2~$n%0A8uf2T;FLBxNQRU^((NoZffe#t5*ShfNu4e> zfe+-d?4MwJ#i7%Q#O}%?P)Q){$QA(>z(!H?7*nUT(WI^Z3~uQeUq-Pvu|8xGU;nWKSzNXh?uWXoS816_XI487`p$5Fc*sHUKbho8rmCNn1k9Qv5t1q zK0f&jbna|4VA&cBbIx^S{EF>Nv@5<)C=?2Xqx=8|`r?noZ%L{E0000)b@d(18FAe4{}q*Rbe1*C)c>JxSawktp#$Q{`G1~if-Bw>X8 z9`L@I-$|+2N$8mNzO9?nTT%;5!%alhdQBESJlvGkShEg2<8_fUF9qgT))n|7<({>Gw#1YlbsOL6-xgE?Z#uN6 zN~9_UjxF|NZpqkx*_L*s7F)JxYqLGGNG~~dncf%K?iW>$o6%12pw>##?PbRvjih8f z6x9i|9|mt3*(Y^L0b4z1JGUs4V_Qx@kqp~%)Njd_*pwstr7kC8Q;sCi6YuHHPi*p= zYK5(ibmLL?o>P$VZBfo8J=1lFnOUK3aZS&36%?>Z@74U+1TE;9Q?6o@zy%$lt02|e zpaK_y!)%p+5(W0<6etq0FDOHq0=sfb3=pv^ zD8mQ^_T-cpB4DpR3m8KlfU+WIj#0WkVK&;KwT)ELvV)p(0>%mG%}0@eAZ5r)CCUHG zI$Z>342(7pb{15VduZ5Re#=_4Au=NaC8Yf0`9aD7<-F{mVnaLfea?tp?mffbRCXN4 haU92S9LI5v@B{(YwZ|7b#ZLeL002ovPDHLkV1k&V#6VmLtK6)YewZ&_to`hzUXV&CUZ zk#x@Of_>jxyw6^ei2Sx~zG)i&csxubqkB?%ZXCzG|Jt_QpXGTD4sw6KEDJbMusmWQ zD8Evs^RGy{%Kmg}Nlws*z=>+7UoR?QGtG2$hqWE%OB`{US?53smT-o7Mv+l#WMA2BPEq!mfh kiX>^p+em(Jt++1FPl7pge*vg25dZ)H07*qoM6N<$g5#&RvH$=8 literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/AppleLogin.imageset/AppleLogin@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/AppleLogin.imageset/AppleLogin@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a7409485e309d378fbe32718c22729b5e5e211a7 GIT binary patch literal 820 zcmeAS@N?(olHy`uVBq!ia0vp^fj}IJ@4fj%E=>?h-F}-lHL`8i+p^bn{=HpCGy)cF(Gtq;JHGgdlj6Dj&s)Pp zj>-#0G~YMgu|LftMsK=5%cJc+@77BS{qJ*{lP=VHc0$L&Cx*ZO+Nn35m5k7v-Yvt& z9=ZPdrl_?l>aTcxU2~RNG+q=_)_+#JHq3k7_0@06cCWgt?6#1HjrnDX)m2NDR8K0PjfbHR)Y0@-I&m+9#o_37tncmB9QVDW{1%fktbK{;XPQ}hCb>c!=g zLnoKbe551Bz43t6>DZ1$l_Zv}9d4_0`n*+=_RX-83Ow`c%0!LM#UJ-;@-H~r73s_{7KeZsAl{3CSHC{~Uzopr07IcvQvd(} literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/AppleLogin.imageset/AppleLogin@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/AppleLogin.imageset/AppleLogin@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a5b6ba8719e5e8fa193c679537d9eec64ead04dc GIT binary patch literal 1181 zcmeAS@N?(olHy`uVBq!ia0vp^l|Wp0zQ}UVlgx%Y>i|>tFZzX4cU#!chZB^j3YY!6)B>Wan z@hR00J~U}I%VV3%dwsZnT1kG@eRXeF)%Rb&tZumorsTia-!XaedV_oQ!5Zf@XR?}$&gHM){k-7)%k(d^)^wXZWd`L-+p zI_2@7KQ^~oa*nmxh>MF)y|Jxyx?9itwUJW_MV~C#zkAcBps67pEk}0m z-t8aDykFP;`PHpz>zntV5pfK=-ov!^LEZlNtIJDuQ@1Sf{<-zK!>dg)QzWK!PCUjY zxo+$3-KVd8dN!5EaKdlNy!?D^PXWF_i#q?D$vKnKk81AJy#HtJ16AdUxSC0uIpiEC zNIsr4$M-|WliF;(lka&o&NRiXpZ<5}M-R8mlWd-kyWKy9M;-hx+$3~H_2=HigYVli zB_^qr$JU7{3%9qoA7tu%vUTg$6HG;SeO~%Xojl>5-k3Y3%jr|b0tN2*vL9xcnoKfI zJgFu-O{YP%o^cy%fykuIrQrtIEu35@7ypciym99ak6MOGy4G2ZlRl>-GhaRNxhux; z?)z_$$+KtAKEYD-(%RbkV1xIk_=1v>DOz`b33hqdrG%M3ExVQ?AO6o!ZD;hcJe9P} zOwH7jH*efn@$208@84fmF-;bk_#@Zlif+(prnGe_HF+VD`fEZ@#RQ!@cTP#UB=hX! z$B$2N{Q9_j`SOW^Rwpwqrs@)81#!pI?4T{_)b=_wM=Kf5GIcl4Ih- zty6M(OV^_Z4-|eIKc3uk!sz0>6k~J0lO3DtJ8#41Kc7AonKm=4 z@(J@zDEgDJi7CEiQ+HS_^8=|9-kaZjzG`*yneM!D-3C?egp*7Wn;1ahPaS5D_qqLZ y=lm3!+xegUX1^@s6D=Y3@00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP_-ij14?Z)h!d0*cP1mlu4=?**Xb4lL!*XR2_`Mww65Gi2e1b59MSI;4GZo#(Q zEIFwJ-D~qEJhEh&Q0fqV)CN~?|%|IO+uuhh(wH_Mvk|3XYgdRxCnfxg#BNhoh*dcSDz1Ra(v5vE@P2# zjqE@W-oM&Dj|crL=nI|CHEvl*fLZy;W${w5CPD2~f~o7Mzuvyk`DbAjMN(|s<>9#b z#%@^Y6UDHK%Z@t*NNF@tUb5Eq}%g5BI_9u;NyQh%rE>m%m4rY literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Google.imageset/Google@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Google.imageset/Google@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..db1d8d2361a5540deda5dd846948b367acf5cdd8 GIT binary patch literal 1147 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 IM6N<$g8Mra{r~^~ literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/Contents.json new file mode 100644 index 00000000..50adfd6a --- /dev/null +++ b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "GoogleLogin.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "GoogleLogin@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "GoogleLogin@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/GoogleLogin.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/GoogleLogin.png new file mode 100644 index 0000000000000000000000000000000000000000..ccf2c0d8035e1c4f91bdfb5481772719a403032c GIT binary patch literal 831 zcmV-F1Hk-=P)qX`+J|i-Sc4Hx>sB4r(MWn21i|X7EpNFi{huE)oVE z!~qjy8kNC;SWFxs5MhB@jsM!Cr7b=0y@c9p34QN+5=icoGfr{F(eccr8oN-{Ha~rzMzsnCv5E7t#Z=h0d1K}U5PiY$c)#UxDsoWtmx z4>Q3K?BXQ|@lsk}UaVx6ap_rw`}ZWv>}6t71g&3Bqaf0NJKfu|GMfYbCm0olWw?KM zfNohyir*2b97KQDH(o)CrvErZ@TvC(PSzb~swXSJu=gg8HPk>0LcR~INZUuh_-IZ^ z4nuK?j*~CqE^Ab>+LpCUand6gPt|n7kkku9QZEciy)Y#8;xC32_pyyTMo|C&002ov JPDHLkV1l(IZw~+f literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/GoogleLogin@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/GoogleLogin@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0e1d0ec58a6ba95af53a8ef68cb89eb7cbbe2f00 GIT binary patch literal 1481 zcmb7^c{~#g7{`Y>B638|a%9O>8i|l&jxn-1=U9%(y;ts+%qxbiF;wd6|-GG%dr3Rr$sSexfMeb7fXBl&7+JqNJD`bR&O~B&M?dXC zF*Y-d`)o$k7lY0nYb`=qEf4Jk^hG>H5qSxr%=1fQ;BGZ5E!#EJ>j1%iwJfjarDfrYhjQhQERvO!q>c!P_J${-v-X}tGy8vqr=&ZV=idke(HDY-;Gta2iG*jGX0 z?enFtV4WqT?}xAW%`aJ*`BMs>^7&^|r#nzyM?NIij@c_H3{8Yb2c;bFerZ7}GtIVr zc`nH+prUbp2fjy;vZ1w%AMKe*<9x-TiV9YyGVZLKU}BFb-nqw0&?|-|WFbdn8RQmO zSF6G(XS^qaP7i5!oVS2q{l3on9+T>Vb+<{pht4HZxYvHzx>0s6uuvYIvzmk9t8Ue=5w4aT1bn^#(ltdf6 zW`_6Ir3Y;4Nb&of&3-^gyp|ugU}xOmQZ;ST(Oy|oW6lO=Dj+TUId@8*8dc&xHE7UUs+nH#Nc^UbZZ4O2 zOzy`tB+$GK54k%I!GnGJPvYOA^@qyJGmlg$59wu(o%3mWvkt6It!l{KB<~(kRUZ_{ zaNWoHO{V|(T90PCeMt=wwy=LPQj~YXXt{LdR(paLV^Y-Q0Q6Uce57Pxs+^8^F{Z06 zV*J}otwiFvGu=MAClr2uX8G+gXsI=6f}r2&IWN&$Xyma@h*DN>Q^?w#eWr!Bu0t3d zC?0NHxj+JT4}1!xK>fXXWoYird4|7zKx20nFhbde{ zkF>b^;*cmFsI{TCrnb+l99-;c-Y%JVTa-F6OfIiDSWeJ@D8l@9m~ERV)_E_&EcxQ_ z)=%FDjse=Z2_f+J)r^SIXXiA)Fy$;m%%q5SsaB!Kt)*3HIpNwR+{o}xoPY5^p^{#; zsaOR}VE(St(cEcvc4AC#-N22kbpF_~y0PMm*-OQaauRx#fBR^Msa#MDTrEu-3H~iI z^G`Lbh11uV3$nvs7^r6`!P>nl?K;!vQN^Ix?2=9F#_i~XquZ^G8x2_)QeuZ&TWyzy zr<fMOi+rUGO4 zu=KPiDtVXc>)1NrrFXs^RQI66eflm%eY;vc8ko8&cJ&0J)nIHyF*x1pt0r#0B%_5q piY_Rm9=AMnmFEAYYWhEX1i+2%rtm53aC4d$0JU_0)S3I-`4@L&pr8N% literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/GoogleLogin@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/GoogleLogin.imageset/GoogleLogin@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..50204f4928bca2b8138e8fdf1d247099430e28fe GIT binary patch literal 2019 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 literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Contents.json new file mode 100644 index 00000000..dd12fd34 --- /dev/null +++ b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Kakao.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Kakao@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Kakao@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Kakao.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Kakao.png new file mode 100644 index 0000000000000000000000000000000000000000..a1d692bd5a4b5305de3d2097c5befc6f1a294950 GIT binary patch literal 468 zcmV;_0W1EAP)X1^@s6D=Y3@00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPLGBI8g33gXz!f^Oaf7Ny=n0@38yVTiM$08IZ7Q)5g@KATF-{R8 zPLnDjLzn)h_}_caUu*+gHVqY-)aKm!nuA9K>$h*{3Af1FwFa#^Z%c$-NobP%6HnmO z2!p4|#3^MEC;nW7_wgr+#k?iPdP5<^>QFj0=Uj&2BP2M=KoEP3ow`E!$?jTuo)Yht z7GEv|SG&Gh^-Zu$zX)GY0Ww%4St@M@GKwxy5jod2Gy{qbPfF zW;@J5RTy)%X0q|-`?I=f9;p~D`~wNszeWsGM}m#`y*oCV8=IKCl%40000< KMNUMnLSTZAjK5F- literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Kakao@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Kakao@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..11055701411159695a245aa9df7fa52f56ecfccb GIT binary patch literal 761 zcmVUpfNGA+K{7AbjC;;eQ+REXT_DJ#3Fa&86q9Acz;M)d!maRv~m7?-T40g6P>y@LT~|%%{qDMu^?A-1o&% z6vsMgfxO1kGc#!R!HMyS>eJG1`!uh5mKS0yx_>HVT90rgn1(d31?}QIq(})Nb~G zSl rjMtP3q3k%1@T^J09S(=X;n4g9nJf1Ad0iVW00000NkvXXu0mjfalKmN literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Kakao@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Kakao.imageset/Kakao@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..9fda95fc0bd9653e6f5ad3cfc56cf0d5d97aa6f7 GIT binary patch literal 1046 zcmV+x1nK*UP)ybUeL>pzXmrD2#o-2^am17 zd|TXc4NZV>>CbMr_vYl}F-lS@#N3vBnwf`KqSyR_y>lJCU8XcB6=Ltq^72hiHcySY zixLzLvC;avY~OSZ&1YC9+zJUa>i4fQ=pI^vI4y?2@Q-u}Hj=u08^679v?i~Kyum@(Q-@ARX+>hlkN0x_} zkCz>+-Lb0V7KjyUZI)LFGs4$FWO#K1Qk>?s%^zaF=?PYZj@4;iTd$+WfBnH*a&xRU zLzEuQUZ2lv?v%x2!}E>uZ>(0bdsE82ovtJZ})zmPyvX%$$lwwS2# z#iLszX?3yaIJ)pz>}i@#727Q|91Y$sGpjFsdEwtA8IrO4O)DUs=dgH=dyyzX>C^n& zleGG$Q8`K0;?`7F97m9LhjZZ%vLJVv2}_6XpOdwOx&jmY0+o!U$4u&h^b``*2)V0y zQlrhwkg(6K1{qK9a1B$CxiA%8!|R|TgQw_eb;P0Qe;EMA`NP_QTKO9k?^_tcY+=I@HsHHX1Hm~`b z;5mq)Hs@Em-Bv6I#UeeJCK23& zj6tB_kn38vlVNdgKX$za5H3ln(~z)1Av>+s5lX&*ljp75 zP#1#sEfsb0uXu+{-6nSjbX^2XgMOzMKVAA=aBE}-=Ntq|ZP&tIF13pZfa_Hp&Mde`{` zeAa)?_Mh`yyb3c2iTT=wON1^(QK!lcvI34p@W>7#pS6BzzD_%Jafoi6G0(prjb6Yp1&>b0
aB7dY9+pCR66OMTc z(Kh3f)HZ5HliGu0{wh&xvwY(kG~-{iZ8rml{DsKaKuw)$y$*-Gg;)|f?|a;#2XM$s zh_*khX;YqH<^&FT9i3~7+|C&O&k)&cP&niz#8bfes-VuigqYf;mE))F7Qcl<-kLKh zIzmkm;zKy(ah_OqQAb2sKhJt_$Xkg0Jnxw;q8@67*__2V=6Q7H4(h~Ip^8-(j(Ob* z%SWTEarN3Aa}rmJ)r+~0o&I3ZgJa(3iDz@swygjJ#-L7rIPAg$?;+ah4n=A$Y>>SF zDj)2^lS)=B_G}|mkhTJk^W5vcrq@34M|n{cH*Z`&h|6-p^iC~!#zci8JUY&Y-p`(c zya91NC@zt^RP3Va5dM6MufS#0&-< zGZ^e*Mg^(FQtRf|r$=cStF5~9ZPN-8qME#$W2`!^E`9G^5-*2uMcT()+vU6Rp6v{lGFVs3e?9TJ(CiJ@tc(dE*U%41k#7%Q*2 z7%Hx{-IKPPE;Elx-lAx=Daux1-SrRjJ?HcNoX_Wc&iVZEJ>T3we;=@cxd8wG0ONeU z@LHy8k*2Sw-OuVyD73VN>KjS}04y-ypySPSh}4=oG`x=opk)9i*NV-t*dtf~psfJ3 zeiEpaRX8s!Ax%d)iN!;GAbPWE@?{7Ccw2$TA}URe+08M8xz8m{JFRz50yu#4nMJn#qE+oaWxP=vPi zJM$;#u(R{-x<7&;7Z_vwL9nrdCCQR|Z$q>(ZV!qPJ9gZRCb#xJk0^-^GAqbplcRar z$1hF3V`Wp9x0gEI$ttT+TOQt%;d#AG?jT7{FNrY&?)+3}`oLgF1^wyEi(1tCTl4eA zK+ETavWK-%vdn$eJck%n&y%m)}dU{W4*H zyjex0Yd|*K^sc4T36s0L;XG(nYibumd?1b~_07Im(*0Cv*oQxqjrw{eO9na@om8|5 zd4+=Zn%K_Mt^M#WrOdx6rjD-pjb4W$b@ra2@wami*1um>L@C7TC_6;VZ9WvXq6uTf z^If`xqNS9f2IR}kPC=sXbX~a(Cfyz0Xx=g!)~w5&4IUmn+1>n%Q|zK%A^d*Cib!ay zDQ`ClRP~xTTddvJFXf~884Vur2K~QhOINI_#tYS0C$S82gmAt2vN@3A{U>!n9mVsbDK}-il;oObXZlEtsmQ0T> z&vj*%FUkZIifUnA=TiQ@4$6%KqRVn%X`*AXOTcJI7;#LJr}F=|^UR1p#HZ8gqg_+t ziAqtwktcW@XqS9vHG}DD4J4?o1=SbAk|!+2_0BKG)h(_DzF`k4VH-3I&8c7t_E&9= zX%5DT>Qtt}87r6|J6|1PT)praRD4ety8Q-mJ`? zj-4v+*Qn2PZt$Yb%c#~!;L%S}5GL4EFBF3Q$UyW?`7qUEqvg zy4Z#J!pfl(%PY~zeO5-h6!}MCiHKP=Fyt`@BALDWOLclHB;2ZFeGLobsrUD=i$g_s xzE-EtV5t_Z;^q9cgVG2mUXbB;9s|HVI}5O}jpaN&ycqs1hx7LLYVnB7`5*6rRqp@* literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Contents.json new file mode 100644 index 00000000..e9735335 --- /dev/null +++ b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Naver.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Naver@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Naver@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Naver.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Naver.png new file mode 100644 index 0000000000000000000000000000000000000000..331d33632674f601bf74d40bd5567e23bcc8cd58 GIT binary patch literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^5|j)nU{oz-7TT)%h@+ZiX43I(k*YToUy40a4ZeLffB#BzTjoDsJ_em< zwSRSm^OkSU9;L`O=QX;>Db%*nWwj1oO97owA zrv3>wY6%cJV5^mXJC7*Tp7vx|f~!dh?zT`)hoR zPwX^cGS>RP^}%sA@${qz4}%)eDJ}J|OS-dcIxut?JYD@< J);T3K0RSN1j;sIx literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Naver@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/Naver.imageset/Naver@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..81ea2b5915580eaf8a36255e3033a6b050afd71e GIT binary patch literal 484 zcmVZFszAH8h2YGa2FBec5j`~`4P{dGv}U_D2J0AySg zyiFDmMi{_cAnG4Em2w~|$ZAys>TN}0Cy>W|D+8f^-7$sZ(V8>v_I>?IQ{l+-lff4&8E_O#t zG!3~u@UIe8DIsY5d*r`Fb|KDE5?khq)AhnR^9f>N0V<`j@6MQ=Mwuh9f079l$N-64F6(jLA&w4x9=|Dgal2Gs8H!kq+R52QJV7TY_(3d$mGx z2hz++Z{hzgzIZQhq}9{!F`$%EN-3q3Qc5ZHrU)XHi{X>|=p#&J_I3|(I9nn@Z}I)u zqPa%6$_(Zo5TQU?{oeED6djT}AXu>zzY@?9$piA-Ho3sVXdfMrB_O9?uGSamfLsCj zW%Q-E{Wbx)d;vL9$m!l<)CaMw0l8JQzrlujtK|)7%N{dtHG+WLRuehfxgQ>Y5Jf;< zV{pZI^wR_c(w5B>5M|4z3dmz?*>nNHx9peA8Avb&D6Kmx$=pnJmuOL}Zu|~{Sw|Am` zL`)^`F+ccMxtI2D5X;_!nvZ|a5qk6|L{StC%$RknaWrYS)!ZryKKfIjxoViB%l|P) zf7__;V)bhG7Xn*$+qf>PpJ!1myG?Yr`Pi1-7Rqr)RLgD&?L3I3W%CZqNLn`aM3JFo z(~n$pw`}@=wk=!iPh`R$kYfh(nOjAFkU=K`^2}<-PZKL7)|r5Ewd@`u6;`G;Vgy>F zt`Nz$>~b+2OW z9OUlAuEU^~g*$&ggP@>bq)m|F3 z&)uC|xYYFN^1{d)$IBnytxSorH9Gg$UHe0bSVA+;48_IE^bJL=Q|7GZJ#j-(Ilq20 zQ()hOi=B~WX(w)Y%mjCy=BjEwg@m>q=`VIKwH+MhPA;3YA^)lr@L>k>A{U3GDBNipO17mb-vxw+R3 P=tTxkS3j3^P6Q`W|)=Xnkn7h{3CXbIJsv z1ax5v8W`V&|A9ABg`|BFTI!mQl*y0vdl?F#9zPt7fVqgl>)@#fhxs~+k4-D(Xq z4>oeyp7+e^*;k?a;j#N)T1BLrFMhp&r|3`jS6Bc6X@|u4&x&(&rAiamgG4=D{an^L HB{Ts5N+rYY literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/NaverLogin.imageset/NaverLogin@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/SocialMedia/NaverLogin.imageset/NaverLogin@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..b287e12fc02f4243a3c55444e6b3df23b7b48b58 GIT binary patch literal 602 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 literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/BerryMap.imageset/BerryMap@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/BerryMap.imageset/BerryMap@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fa1fec33487e6b110caa1d38b5f78d78493fdd7a GIT binary patch literal 24966 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 literal 0 HcmV?d00001 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/BerryMap.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/BerryMap.imageset/Contents.json new file mode 100644 index 00000000..32d2a348 --- /dev/null +++ b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/BerryMap.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "BerryMap.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "BerryMap@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "BerryMap@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/EnrollCharacter.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/EnrollCharacter.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/EnrollCharacter.imageset/EnrollCharacter.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/EnrollCharacter.imageset/EnrollCharacter.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/EnrollCharacter.imageset/EnrollCharacter@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/EnrollCharacter.imageset/EnrollCharacter@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/EnrollCharacter.imageset/EnrollCharacter@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/EnrollCharacter.imageset/EnrollCharacter@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/EnrollCharacter.imageset/EnrollCharacter@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/LoginCharacter.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/LoginCharacter.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/LoginCharacter.imageset/LoginCharacter.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/LoginCharacter.imageset/LoginCharacter.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/LoginCharacter.imageset/LoginCharacter@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/LoginCharacter.imageset/LoginCharacter@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/LoginCharacter.imageset/LoginCharacter@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/LoginCharacter.imageset/LoginCharacter@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/LoginCharacter.imageset/LoginCharacter@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon1.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon1.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon1.imageset/MyIcon1.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon1.imageset/MyIcon1.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon1.imageset/MyIcon1@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon1.imageset/MyIcon1@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon1.imageset/MyIcon1@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon1.imageset/MyIcon1@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon1.imageset/MyIcon1@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon2.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon2.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon2.imageset/MyIcon2.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon2.imageset/MyIcon2.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon2.imageset/MyIcon2@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon2.imageset/MyIcon2@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon2.imageset/MyIcon2@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon2.imageset/MyIcon2@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon2.imageset/MyIcon2@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon3.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon3.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon3.imageset/MyIcon3.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon3.imageset/MyIcon3.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon3.imageset/MyIcon3@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon3.imageset/MyIcon3@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon3.imageset/MyIcon3@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon3.imageset/MyIcon3@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon3.imageset/MyIcon3@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon4.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon4.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon4.imageset/MyIcon4.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon4.imageset/MyIcon4.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon4.imageset/MyIcon4@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon4.imageset/MyIcon4@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon4.imageset/MyIcon4@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon4.imageset/MyIcon4@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon4.imageset/MyIcon4@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon5.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon5.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon5.imageset/MyIcon5.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon5.imageset/MyIcon5.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon5.imageset/MyIcon5@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon5.imageset/MyIcon5@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon5.imageset/MyIcon5@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/MyIcon5.imageset/MyIcon5@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/MyIcon5.imageset/MyIcon5@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/NoResultCharacter.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/NoResultCharacter.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/NoResultCharacter.imageset/NoResultCharacter.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/NoResultCharacter.imageset/NoResultCharacter.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/NoResultCharacter.imageset/NoResultCharacter@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/NoResultCharacter.imageset/NoResultCharacter@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/NoResultCharacter.imageset/NoResultCharacter@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Main/NoResultCharacter.imageset/NoResultCharacter@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/berry/NoResultCharacter.imageset/NoResultCharacter@3x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle.png deleted file mode 100644 index 1b097c11f47a248f7f97cb237295366a59078ffd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1178 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 diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/LaunchScreen/LaunchTitle.imageset/LaunchTitle@3x.png deleted file mode 100644 index 2c2a779cda4f22ed7c001629212a42c44e695359..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2688 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 diff --git a/AVIRO/Scene/Feature/Login/ViewController/LoginButton.swift b/AVIRO/Scene/Feature/Login/ViewController/LoginButton.swift new file mode 100644 index 00000000..f3f328e0 --- /dev/null +++ b/AVIRO/Scene/Feature/Login/ViewController/LoginButton.swift @@ -0,0 +1,80 @@ +// +// LoginButton.swift +// AVIRO +// +// Created by 전성훈 on 7/1/24. +// + +import UIKit + +final class LoginButton: UIButton { + var didTappedButton: (() -> Void)? + + override init(frame: CGRect) { + super.init(frame: frame) + + setAttribute() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func setAttribute() { + self.imageEdgeInsets = UIEdgeInsets(top: 0, left: -8, bottom: 0, right: 0) + self.titleLabel?.font = .pretendard(size: 17, weight: .medium) + self.layer.borderWidth = 1 + self.layer.cornerRadius = 26 + self.clipsToBounds = true + + self.addTarget( + self, + action: #selector(didTappedButton(_:)), + for: .touchUpInside + ) + } + + func setButtonStyle(type: LoginType) { + switch type { + case .apple: + setTitle("애플 로그인", for: .normal) + setTitleColor(.white, for: .normal) + setButtonImage(.appleLogin) + + self.layer.borderColor = UIColor.black.cgColor + self.backgroundColor = .black + case .google: + setTitle("구글 로그인", for: .normal) + setTitleColor(.black, for: .normal) + setButtonImage(.googleLogin) + + self.layer.borderColor = UIColor(hex: "#D5D5D5").cgColor + self.backgroundColor = .white + case .kakao: + setTitle("카카오 로그인", for: .normal) + setTitleColor(.black, for: .normal) + setButtonImage(.kakaoLogin) + + self.layer.borderColor = UIColor(hex: "#FEE500").cgColor + self.backgroundColor = UIColor(hex: "#FEE500") + case .naver: + setTitle("네이버 로그인", for: .normal) + setTitleColor(.white, for: .normal) + setButtonImage(.naverLogin) + + self.layer.borderColor = UIColor(hex: "#03C75A").cgColor + self.backgroundColor = UIColor(hex: "#03C75A") + } + } + + private func setButtonImage(_ image: UIImage) { + setImage(image, for: .normal) + setImage(image, for: .highlighted) + setImage(image, for: .selected) + setImage(image, for: .disabled) + } + + @objc private func didTappedButton(_ sender: UIButton) { + self.didTappedButton?() + } +} diff --git a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift index 99a28e79..834d9c63 100644 --- a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift +++ b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift @@ -84,36 +84,61 @@ final class LoginViewController: UIViewController { return imageView }() - private lazy var appleLoginButton: UIButton = { - let button = UIButton() + private lazy var naverButton: LoginButton = { + let btn = LoginButton() - button.setTitle(Text.apple.rawValue, for: .normal) - button.setTitleColor(.white, for: .normal) - button.setImage(UIImage.apple, for: .normal) - - button.imageEdgeInsets = UIEdgeInsets( - top: 0, - left: -8, - bottom: 0, - right: 0 - ) - button.titleLabel?.font = .pretendard(size: 17, weight: .medium) + btn.setButtonStyle(type: .naver) + btn.didTappedButton = { [weak self] in + print("naver") + } - button.layer.borderColor = UIColor.black.cgColor - button.layer.borderWidth = 2 - button.layer.cornerRadius = 26 - button.clipsToBounds = true - button.backgroundColor = .black + return btn + }() + + private lazy var kakaoButton: LoginButton = { + let btn = LoginButton() - button.addTarget( - self, - action: #selector(tapAppleLogin), - for: .touchUpInside - ) + btn.setButtonStyle(type: .kakao) + btn.didTappedButton = { [weak self] in + print("kakao") + } + + return btn + }() + + private lazy var googleButton: LoginButton = { + let btn = LoginButton() + + btn.setButtonStyle(type: .google) + btn.didTappedButton = { [weak self] in + print("google") + } + + return btn + }() + + private lazy var appleButton: LoginButton = { + let btn = LoginButton() - return button + btn.setButtonStyle(type: .apple) + btn.didTappedButton = { [weak self] in + print("apple") + } + + return btn }() + private lazy var loginButtonStackView: UIStackView = { + let stackView = UIStackView() + + stackView.axis = .vertical + stackView.spacing = 10 + stackView.alignment = .fill + stackView.distribution = .fillEqually + + return stackView + }() + private lazy var indicatorView: UIActivityIndicatorView = { let indicatorView = UIActivityIndicatorView() @@ -144,11 +169,23 @@ final class LoginViewController: UIViewController { extension LoginViewController: LoginViewProtocol { // MARK: Set up func func setupLayout() { + [ + naverButton, + kakaoButton, + googleButton, + appleButton + ].forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + $0.heightAnchor.constraint(equalToConstant: 50).isActive = true + + loginButtonStackView.addArrangedSubview($0) + } + [ topImageView, titleLabel, mainImageView, - appleLoginButton, + loginButtonStackView, blurEffectView, indicatorView ].forEach { @@ -164,23 +201,11 @@ extension LoginViewController: LoginViewProtocol { titleLabel.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 37), mainImageView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -35), - mainImageView.bottomAnchor.constraint(equalTo: appleLoginButton.topAnchor, constant: -20), + mainImageView.bottomAnchor.constraint(equalTo: loginButtonStackView.topAnchor, constant: -20), - appleLoginButton.bottomAnchor.constraint( - equalTo: view.safeAreaLayoutGuide.bottomAnchor, - constant: -Layout.Margin.appleToBottom.rawValue - ), - appleLoginButton.leadingAnchor.constraint( - equalTo: self.view.leadingAnchor, - constant: Layout.Margin.buttonH.rawValue - ), - appleLoginButton.trailingAnchor.constraint( - equalTo: self.view.trailingAnchor, - constant: -Layout.Margin.buttonH.rawValue - ), - appleLoginButton.heightAnchor.constraint( - equalToConstant: Layout.Size.buttonHeight.rawValue - ), + loginButtonStackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 26.5), + loginButtonStackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -26.5), + loginButtonStackView.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor, constant: -40), indicatorView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor), indicatorView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor) From 703ba70e76577a6ab5a881474d69db585ac26e44 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Mon, 1 Jul 2024 17:00:23 +0900 Subject: [PATCH 15/37] =?UTF-8?q?[Feat]:=20Login=20ViewController=20UI=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contents.json | 0 .../avrioReverse.png | Bin .../avrioReverse@2x.png | Bin .../avrioReverse@3x.png | Bin .../ViewController/LoginViewController.swift | 63 ++++-------------- 5 files changed, 12 insertions(+), 51 deletions(-) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/{avrioReverse.imageset => aviroReverse.imageset}/Contents.json (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/{avrioReverse.imageset => aviroReverse.imageset}/avrioReverse.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/{avrioReverse.imageset => aviroReverse.imageset}/avrioReverse@2x.png (100%) rename AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/{avrioReverse.imageset => aviroReverse.imageset}/avrioReverse@3x.png (100%) diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/Contents.json b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/aviroReverse.imageset/Contents.json similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/Contents.json rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/aviroReverse.imageset/Contents.json diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/aviroReverse.imageset/avrioReverse.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/aviroReverse.imageset/avrioReverse.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse@2x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/aviroReverse.imageset/avrioReverse@2x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse@2x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/aviroReverse.imageset/avrioReverse@2x.png diff --git a/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse@3x.png b/AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/aviroReverse.imageset/avrioReverse@3x.png similarity index 100% rename from AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/avrioReverse.imageset/avrioReverse@3x.png rename to AVIRO/Resources/Assets.xcassets/ImageSet/Assets/Launch&Login/aviroReverse.imageset/avrioReverse@3x.png diff --git a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift index 834d9c63..83903ea2 100644 --- a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift +++ b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift @@ -33,57 +33,22 @@ final class LoginViewController: UIViewController { lazy var presenter = LoginViewPresenter(viewController: self) // MARK: UI Property Definitions - private lazy var topImageView: UIImageView = { + private lazy var titleImageView: UIImageView = { let imageView = UIImageView() - - imageView.image = UIImage.launchtitle - imageView.clipsToBounds = false + + imageView.image = .aviroReverse return imageView }() - private lazy var titleLabel: UILabel = { - let label = UILabel() - - let text = "가장 쉬운\n비건 맛집 찾기\n어비로" - - let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.lineSpacing = 2 - - let normalAttributes: [NSAttributedString.Key: Any] = [ - .font: UIFont.pretendard(size: 45, weight: .medium), - .foregroundColor: UIColor.loginTitleColor, - .paragraphStyle: paragraphStyle - ] - - let attributedString = NSMutableAttributedString(string: text, attributes: normalAttributes) - - let heavyAttributes: [NSAttributedString.Key: Any] = [ - .font: UIFont.pretendard(size: 45, weight: .heavy), - .foregroundColor: UIColor.main, - .paragraphStyle: paragraphStyle - ] - - if let range = text.range(of: "어비로") { - attributedString.addAttributes(heavyAttributes, range: NSRange(range, in: text)) - } - - label.attributedText = attributedString - label.textAlignment = .left - label.numberOfLines = 3 - - return label - }() - - private lazy var mainImageView: UIImageView = { + private lazy var berryMapImageView: UIImageView = { let imageView = UIImageView() - imageView.image = UIImage.loginCharacter - imageView.clipsToBounds = false + imageView.image = .berryMap return imageView }() - + private lazy var naverButton: LoginButton = { let btn = LoginButton() @@ -182,9 +147,8 @@ extension LoginViewController: LoginViewProtocol { } [ - topImageView, - titleLabel, - mainImageView, + titleImageView, + berryMapImageView, loginButtonStackView, blurEffectView, indicatorView @@ -194,14 +158,11 @@ extension LoginViewController: LoginViewProtocol { } NSLayoutConstraint.activate([ - topImageView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 23), - topImageView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 38), - - titleLabel.topAnchor.constraint(equalTo: topImageView.bottomAnchor, constant: 15), - titleLabel.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 37), + titleImageView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor), + titleImageView.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor, constant: 30), - mainImageView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -35), - mainImageView.bottomAnchor.constraint(equalTo: loginButtonStackView.topAnchor, constant: -20), + berryMapImageView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor), + berryMapImageView.bottomAnchor.constraint(equalTo: loginButtonStackView.topAnchor, constant: -45), loginButtonStackView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 26.5), loginButtonStackView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -26.5), From 6c72bda27bc904b0174934b4c2da2a41674fd4f0 Mon Sep 17 00:00:00 2001 From: seonghun jeon Date: Sat, 6 Jul 2024 00:51:31 +0900 Subject: [PATCH 16/37] =?UTF-8?q?[Feat]:=20social=20login=20thrid=20party?= =?UTF-8?q?=20library=20=EC=84=A4=EC=B9=98=20&=20naver=20repo=20=EC=84=A4?= =?UTF-8?q?=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 24 ++++-- AVIRO/App/AppController.swift | 15 +++- AVIRO/App/AppDelegate.swift | 24 ++++++ AVIRO/App/DIContainer.swift | 2 + AVIRO/App/Info.plist | 38 +++++++++ AVIRO/App/SceneDelegate.swift | 16 ++++ .../AppleAuthRepository.swift | 18 ++++ .../AutoLoginRepository.swift | 8 -- .../GoogleAuthRepository.swift | 26 ++++++ .../KakaoAuthRepository.swift | 26 ++++++ .../NaverAuthRepository.swift | 52 ++++++++++++ .../UserAccountRepository.swift | 0 .../SocialLoginRepositoryInterface.swift | 16 ++++ .../Domain/UseCases/SocialLoginUseCase.swift | 30 +++++-- .../ViewController/LoginViewController.swift | 9 +- .../ViewPresenter/LoginViewPresenter.swift | 12 ++- Podfile | 12 +++ Podfile.lock | 85 ++++++++++++++++++- 18 files changed, 383 insertions(+), 30 deletions(-) delete mode 100644 AVIRO/Data/Repositories/AuthRepositories/AutoLoginRepository.swift create mode 100644 AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift create mode 100644 AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift create mode 100644 AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift rename AVIRO/Data/Repositories/{AuthRepositories => UserInfoRepositories}/UserAccountRepository.swift (100%) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 565795b6..39b2ea04 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 56; + objectVersion = 60; objects = { /* Begin PBXBuildFile section */ @@ -210,6 +210,9 @@ C5BA9E142BED2244004FA06E /* BaseCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9E132BED2244004FA06E /* BaseCoordinator.swift */; }; C5BA9E172BED2585004FA06E /* printIfDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9E162BED2585004FA06E /* printIfDebug.swift */; }; C5BA9E192BED25D2004FA06E /* DIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5BA9E182BED25D2004FA06E /* DIContainer.swift */; }; + C5C1786D2C37B2E700B774AE /* GoogleAuthRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C1786C2C37B2E700B774AE /* GoogleAuthRepository.swift */; }; + C5C1786F2C37B30500B774AE /* KakaoAuthRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C1786E2C37B30500B774AE /* KakaoAuthRepository.swift */; }; + C5C178712C37B30E00B774AE /* NaverAuthRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C178702C37B30E00B774AE /* NaverAuthRepository.swift */; }; C5C20BAC2AD504D500855BBB /* AmplitudeUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C20BAB2AD504D500855BBB /* AmplitudeUtility.swift */; }; C5C290742A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C290732A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift */; }; C5C290772A85E4FF00ED5DCE /* PlaceHomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C290762A85E4FF00ED5DCE /* PlaceHomeView.swift */; }; @@ -282,7 +285,6 @@ C5ED99492C088E1B0077B2F9 /* UserChallengeRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99482C088E1B0077B2F9 /* UserChallengeRepository.swift */; }; C5ED994B2C088E240077B2F9 /* UserInfoRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED994A2C088E240077B2F9 /* UserInfoRepository.swift */; }; C5ED994D2C088E2C0077B2F9 /* AppleAuthRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED994C2C088E2C0077B2F9 /* AppleAuthRepository.swift */; }; - C5ED994F2C088E340077B2F9 /* AutoLoginRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED994E2C088E340077B2F9 /* AutoLoginRepository.swift */; }; C5ED99512C088E3E0077B2F9 /* UserAccountRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99502C088E3E0077B2F9 /* UserAccountRepository.swift */; }; C5ED995A2C088EE30077B2F9 /* SocialLoginRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED99592C088EE30077B2F9 /* SocialLoginRepositoryInterface.swift */; }; C5ED995E2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5ED995D2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift */; }; @@ -547,6 +549,9 @@ C5BA9E132BED2244004FA06E /* BaseCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCoordinator.swift; sourceTree = ""; }; C5BA9E162BED2585004FA06E /* printIfDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = printIfDebug.swift; sourceTree = ""; }; C5BA9E182BED25D2004FA06E /* DIContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DIContainer.swift; sourceTree = ""; }; + C5C1786C2C37B2E700B774AE /* GoogleAuthRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoogleAuthRepository.swift; sourceTree = ""; }; + C5C1786E2C37B30500B774AE /* KakaoAuthRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KakaoAuthRepository.swift; sourceTree = ""; }; + C5C178702C37B30E00B774AE /* NaverAuthRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NaverAuthRepository.swift; sourceTree = ""; }; C5C20BAB2AD504D500855BBB /* AmplitudeUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AmplitudeUtility.swift; sourceTree = ""; }; C5C290732A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceSegmentedControlView.swift; sourceTree = ""; }; C5C290762A85E4FF00ED5DCE /* PlaceHomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceHomeView.swift; sourceTree = ""; }; @@ -619,7 +624,6 @@ C5ED99482C088E1B0077B2F9 /* UserChallengeRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserChallengeRepository.swift; sourceTree = ""; }; C5ED994A2C088E240077B2F9 /* UserInfoRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoRepository.swift; sourceTree = ""; }; C5ED994C2C088E2C0077B2F9 /* AppleAuthRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleAuthRepository.swift; sourceTree = ""; }; - C5ED994E2C088E340077B2F9 /* AutoLoginRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoLoginRepository.swift; sourceTree = ""; }; C5ED99502C088E3E0077B2F9 /* UserAccountRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAccountRepository.swift; sourceTree = ""; }; C5ED99592C088EE30077B2F9 /* SocialLoginRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialLoginRepositoryInterface.swift; sourceTree = ""; }; C5ED995D2C088EFA0077B2F9 /* UserAccountRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAccountRepositoryInterface.swift; sourceTree = ""; }; @@ -2333,8 +2337,9 @@ isa = PBXGroup; children = ( C5ED994C2C088E2C0077B2F9 /* AppleAuthRepository.swift */, - C5ED994E2C088E340077B2F9 /* AutoLoginRepository.swift */, - C5ED99502C088E3E0077B2F9 /* UserAccountRepository.swift */, + C5C1786C2C37B2E700B774AE /* GoogleAuthRepository.swift */, + C5C1786E2C37B30500B774AE /* KakaoAuthRepository.swift */, + C5C178702C37B30E00B774AE /* NaverAuthRepository.swift */, ); path = AuthRepositories; sourceTree = ""; @@ -2342,6 +2347,7 @@ C5ED99282C08804E0077B2F9 /* UserInfoRepositories */ = { isa = PBXGroup; children = ( + C5ED99502C088E3E0077B2F9 /* UserAccountRepository.swift */, C5ED994A2C088E240077B2F9 /* UserInfoRepository.swift */, ); path = UserInfoRepositories; @@ -2776,7 +2782,7 @@ }; }; buildConfigurationList = C52FA33A2A175B20005E70DC /* Build configuration list for PBXProject "AVIRO" */; - compatibilityVersion = "Xcode 14.0"; + compatibilityVersion = "Xcode 15.0"; developmentRegion = ko; hasScannedForEncodings = 0; knownRegions = ( @@ -2928,6 +2934,7 @@ C5ED46932AAEB02F00F2DA04 /* PlaceOperationHoursViewController.swift in Sources */, C5732C752A41962D00CDC499 /* AVIRORequestAPI.swift in Sources */, C562B6DC2B38704600CE5D4C /* ChallengeViewModel.swift in Sources */, + C5C178712C37B30E00B774AE /* NaverAuthRepository.swift in Sources */, C5C20BAC2AD504D500855BBB /* AmplitudeUtility.swift in Sources */, C513854C2AAB3B52001AB827 /* NickNameChangeblePresenter.swift in Sources */, C5D93DA12A581F5A00629C39 /* FirstRegistrationPresenter.swift in Sources */, @@ -2986,6 +2993,7 @@ C5C90EBD2AA85E7000AB3668 /* AVIROOperationHours+DTO.swift in Sources */, C5F33DFD2ADED19000A29FB9 /* SystemUtility.swift in Sources */, C513854E2AAD8E9F001AB827 /* AVIROReportPlace+DTO.swift in Sources */, + C5C1786F2C37B30500B774AE /* KakaoAuthRepository.swift in Sources */, C5ED996A2C0890B30077B2F9 /* StoreReviewRepositoryInterface.swift in Sources */, C520663C2A80C0450038ECCD /* CenterCoordinate.swift in Sources */, C58EC7D22AB1B5AD00401FF7 /* AVIROEditPhone+DTO.swift in Sources */, @@ -3040,7 +3048,6 @@ C5E7B7A92A4D3CDF00CA2090 /* AVIROUser+DTO.swift in Sources */, C5A201C32A98A61F00A54381 /* EditLocationBottomView.swift in Sources */, C5DCBC8B2B91CEE8003502BA /* AVIROMyCommentList+DTO.swift in Sources */, - C5ED994F2C088E340077B2F9 /* AutoLoginRepository.swift in Sources */, C52066232A7CAC910038ECCD /* NoHistoryView.swift in Sources */, C5E306E72A6FB4ED00C11CF7 /* MenuField.swift in Sources */, C5ED46982AAEEFB600F2DA04 /* OperationHoursView.swift in Sources */, @@ -3189,6 +3196,7 @@ C5FD92F72A9CDB9300CF4673 /* EditMenuTopView.swift in Sources */, C5ED994D2C088E2C0077B2F9 /* AppleAuthRepository.swift in Sources */, C56857822A7113CF00F52715 /* RequestTableViewCell.swift in Sources */, + C5C1786D2C37B2E700B774AE /* GoogleAuthRepository.swift in Sources */, C52CD2DD2BCA5C310031671B /* BlurEffectView.swift in Sources */, C5C2907B2A85E51B00ED5DCE /* PlaceReviewsView.swift in Sources */, C5BA9DC92BE8AB8F004FA06E /* DataTransferService.swift in Sources */, @@ -3381,6 +3389,7 @@ INFOPLIST_FILE = AVIRO/App/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "어비로"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.lifestyle"; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "근처 비건 식당 검색이 이제 더 쉬어집니다! 사용자의 위치 정보는 서비스 이용간 최적화하는 데 사용되며, 모든 데이터는 안전하게 관리됩니다."; INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "근처 비건 식당 검색이 이제 더 쉬어집니다! 사용자의 위치 정보는 서비스 이용간 최적화하는 데 사용되며, 모든 데이터는 안전하게 관리됩니다."; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; @@ -3418,6 +3427,7 @@ INFOPLIST_FILE = AVIRO/App/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = "어비로"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.lifestyle"; + INFOPLIST_KEY_NSHumanReadableCopyright = ""; INFOPLIST_KEY_NSLocationAlwaysUsageDescription = "근처 비건 식당 검색이 이제 더 쉬어집니다! 사용자의 위치 정보는 서비스 이용간 최적화하는 데 사용되며, 모든 데이터는 안전하게 관리됩니다."; INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "근처 비건 식당 검색이 이제 더 쉬어집니다! 사용자의 위치 정보는 서비스 이용간 최적화하는 데 사용되며, 모든 데이터는 안전하게 관리됩니다."; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; diff --git a/AVIRO/App/AppController.swift b/AVIRO/App/AppController.swift index f1641ac3..dfdd85c4 100644 --- a/AVIRO/App/AppController.swift +++ b/AVIRO/App/AppController.swift @@ -96,8 +96,21 @@ final class AppController { // MARK: login View private func setLoginView(type: LoginViewToastType = .none) { + let container = DIContainer.shared + + let socialLoginUsecase = SocialLoginUseCase( + appleLoginRepository: container.resolve(AppleAuthRepository.self)!, + googleLoginRepository: container.resolve(GoogleAuthRepository.self)!, + kakaoLoginRepository: container.resolve(KakaoAuthRepository.self)!, + naverLoginRepository: container.resolve(NaverAuthRepository.self)! + ) + let loginVC = LoginViewController() - let presenter = LoginViewPresenter(viewController: loginVC) + let presenter = LoginViewPresenter( + socialLoginUseCase: socialLoginUsecase, + viewController: loginVC + ) + loginVC.presenter = presenter switch type { diff --git a/AVIRO/App/AppDelegate.swift b/AVIRO/App/AppDelegate.swift index 6f6767a1..6034427c 100644 --- a/AVIRO/App/AppDelegate.swift +++ b/AVIRO/App/AppDelegate.swift @@ -23,6 +23,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { self.setNaverMapAPI() self.setAmplitude() + self.registerRepository() + return true } @@ -73,4 +75,26 @@ class AppDelegate: UIResponder, UIApplicationDelegate { amplitude = Amplitude(configuration: Configuration(apiKey: key)) } + + private func registerRepository() { + DIContainer.shared.register( + AppleAuthRepository.self, + dependency: AppleAuthRepository() + ) + + DIContainer.shared.register( + GoogleAuthRepository.self, + dependency: GoogleAuthRepository() + ) + + DIContainer.shared.register( + KakaoAuthRepository.self, + dependency: KakaoAuthRepository() + ) + + DIContainer.shared.register( + NaverAuthRepository.self, + dependency: NaverAuthRepository() + ) + } } diff --git a/AVIRO/App/DIContainer.swift b/AVIRO/App/DIContainer.swift index 9ca4e45f..f157f633 100644 --- a/AVIRO/App/DIContainer.swift +++ b/AVIRO/App/DIContainer.swift @@ -8,6 +8,8 @@ import Foundation final class DIContainer { + static let shared = DIContainer() + private var dependencies: [String: AnyObject] = [:] private init() { } diff --git a/AVIRO/App/Info.plist b/AVIRO/App/Info.plist index 32f16f25..b7a0525b 100644 --- a/AVIRO/App/Info.plist +++ b/AVIRO/App/Info.plist @@ -2,10 +2,48 @@ + CFBundleGetInfoString + CFBundleLocalizations ko + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.310817462771-q5o6bv76a0os9lgqaqfico9jomv7fvkc + + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.aviro.ios + + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + kakaoa880a81ee8796717e8d6e517630fff5d + + + + GIDClientID + 310817462771-q5o6bv76a0os9lgqaqfico9jomv7fvkc.apps.googleusercontent.com + LSApplicationQueriesSchemes + + kakaokompassauth + kakaolink + naversearchapp + naversearchthridlogin + UIAppFonts Pretendard-Black.otf diff --git a/AVIRO/App/SceneDelegate.swift b/AVIRO/App/SceneDelegate.swift index 1f3ff727..1ae9bca5 100644 --- a/AVIRO/App/SceneDelegate.swift +++ b/AVIRO/App/SceneDelegate.swift @@ -7,6 +7,8 @@ import UIKit +import NaverThirdPartyLogin + class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? @@ -32,4 +34,18 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { } } } + + func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { + guard let urlContext = URLContexts.first else { return } + let url = urlContext.url + + // URL의 스킴을 확인합니다. + if url.scheme == "com.aviro.ios" { + NaverThirdPartyLoginConnection + .getSharedInstance() + .receiveAccessToken(url) + } else { + + } + } } diff --git a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift index 805cd796..d7b88060 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift @@ -6,3 +6,21 @@ // import Foundation + +final class AppleAuthRepository { + init() { } +} + +extension AppleAuthRepository: AppleAuthRepositoryInterface { + func login(completion: @escaping (Result) -> Void) { + + } + + func logout(completion: @escaping (Result) -> Void) { + + } + + func autoLogin(completion: @escaping (Result) -> Void) { + + } +} diff --git a/AVIRO/Data/Repositories/AuthRepositories/AutoLoginRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/AutoLoginRepository.swift deleted file mode 100644 index db0bfc9a..00000000 --- a/AVIRO/Data/Repositories/AuthRepositories/AutoLoginRepository.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// AutoLoginRepository.swift -// AVIRO -// -// Created by 전성훈 on 5/30/24. -// - -import Foundation diff --git a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift new file mode 100644 index 00000000..e48463e3 --- /dev/null +++ b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift @@ -0,0 +1,26 @@ +// +// GoogleAuthRepository.swift +// AVIRO +// +// Created by 전성훈 on 7/5/24. +// + +import Foundation + +final class GoogleAuthRepository { + init() { } +} + +extension GoogleAuthRepository: GoogleAuthRepositoryInterface { + func login(completion: @escaping (Result) -> Void) { + + } + + func logout(completion: @escaping (Result) -> Void) { + + } + + func autoLogin(completion: @escaping (Result) -> Void) { + + } +} diff --git a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift new file mode 100644 index 00000000..08ddcefe --- /dev/null +++ b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift @@ -0,0 +1,26 @@ +// +// KakaoAuthRepository.swift +// AVIRO +// +// Created by 전성훈 on 7/5/24. +// + +import Foundation + +final class KakaoAuthRepository { + init() { } +} + +extension KakaoAuthRepository: KakaoAuthRepositoryInterface { + func login(completion: @escaping (Result) -> Void) { + + } + + func logout(completion: @escaping (Result) -> Void) { + + } + + func autoLogin(completion: @escaping (Result) -> Void) { + + } +} diff --git a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift new file mode 100644 index 00000000..c5718a61 --- /dev/null +++ b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift @@ -0,0 +1,52 @@ +// +// NaverAuthRepository.swift +// AVIRO +// +// Created by 전성훈 on 7/5/24. +// + +import Foundation + +import NaverThirdPartyLogin + +final class NaverAuthRepository { + let instance = NaverThirdPartyLoginConnection.getSharedInstance() + + init() { + guard let keyURL = Bundle.main.url(forResource: "API", withExtension: "plist"), + let dictionary = NSDictionary(contentsOf: keyURL) as? [String: Any] else { return } + + let consumerKey = (dictionary["Naver_Client_ID"] as? String)! + let consumerSecret = (dictionary["Naver_Client_Secret"] as? String)! + + // 네이버 앱에서 인증 +// instance?.isNaverAppOauthEnable = true + + // 사파리에서 인증 + instance?.isInAppOauthEnable = true + instance?.isOnlyPortraitSupportedInIphone() + + instance?.serviceUrlScheme = "com.aviro.ios" + instance?.consumerKey = consumerKey + instance?.consumerSecret = consumerSecret + instance?.appName = "어비로" + } +} + +extension NaverAuthRepository: NaverAuthRepositoryInterface { + func loadNaverApp() { + instance?.requestThirdPartyLogin() + } + + func login(completion: @escaping (Result) -> Void) { + + } + + func logout(completion: @escaping (Result) -> Void) { + + } + + func autoLogin(completion: @escaping (Result) -> Void) { + + } +} diff --git a/AVIRO/Data/Repositories/AuthRepositories/UserAccountRepository.swift b/AVIRO/Data/Repositories/UserInfoRepositories/UserAccountRepository.swift similarity index 100% rename from AVIRO/Data/Repositories/AuthRepositories/UserAccountRepository.swift rename to AVIRO/Data/Repositories/UserInfoRepositories/UserAccountRepository.swift diff --git a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift index 644596ed..9f0381fe 100644 --- a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift +++ b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift @@ -14,3 +14,19 @@ protocol SocialLoginRepositoryInterface { func logout(completion: @escaping (Result) -> Void) func autoLogin(completion: @escaping (Result) -> Void) } + +protocol AppleAuthRepositoryInterface: SocialLoginRepositoryInterface { + +} + +protocol GoogleAuthRepositoryInterface: SocialLoginRepositoryInterface { + +} + +protocol KakaoAuthRepositoryInterface: SocialLoginRepositoryInterface { + +} + +protocol NaverAuthRepositoryInterface: SocialLoginRepositoryInterface { + func loadNaverApp() +} diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index 529815eb..91e1d35b 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -8,21 +8,22 @@ import Foundation protocol SocialLoginUseCaseInterface: AnyObject { + func loadURL(type: LoginType) func login(type: LoginType, completion: @escaping (Result) -> Void) func logout(type: LoginType, completion: @escaping (Result) -> Void) } final class SocialLoginUseCase { - private let appleLoginRepository: SocialLoginRepositoryInterface - private let googleLoginRepository: SocialLoginRepositoryInterface - private let kakaoLoginRepository: SocialLoginRepositoryInterface - private let naverLoginRepository: SocialLoginRepositoryInterface + private let appleLoginRepository: AppleAuthRepositoryInterface + private let googleLoginRepository: GoogleAuthRepositoryInterface + private let kakaoLoginRepository: KakaoAuthRepositoryInterface + private let naverLoginRepository: NaverAuthRepositoryInterface init( - appleLoginRepository: SocialLoginRepositoryInterface, - googleLoginRepository: SocialLoginRepositoryInterface, - kakaoLoginRepository: SocialLoginRepositoryInterface, - naverLoginRepository: SocialLoginRepositoryInterface + appleLoginRepository: AppleAuthRepositoryInterface, + googleLoginRepository: GoogleAuthRepositoryInterface, + kakaoLoginRepository: KakaoAuthRepositoryInterface, + naverLoginRepository: NaverAuthRepositoryInterface ) { self.appleLoginRepository = appleLoginRepository self.googleLoginRepository = googleLoginRepository @@ -32,6 +33,19 @@ final class SocialLoginUseCase { } extension SocialLoginUseCase: SocialLoginUseCaseInterface { + func loadURL(type: LoginType) { + switch type { + case .apple: + break + case .google: + break + case .kakao: + break + case .naver: + naverLoginRepository.loadNaverApp() + } + } + func login( type: LoginType, completion: @escaping (Result) -> Void diff --git a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift index 83903ea2..de3ad276 100644 --- a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift +++ b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift @@ -30,8 +30,8 @@ private enum Layout { } final class LoginViewController: UIViewController { - lazy var presenter = LoginViewPresenter(viewController: self) - + var presenter: LoginViewPresenter! + // MARK: UI Property Definitions private lazy var titleImageView: UIImageView = { let imageView = UIImageView() @@ -51,10 +51,11 @@ final class LoginViewController: UIViewController { private lazy var naverButton: LoginButton = { let btn = LoginButton() - + btn.setButtonStyle(type: .naver) btn.didTappedButton = { [weak self] in - print("naver") + // TODO: 함수 위치 변경하기 + self?.presenter.loadURL(type: .naver) } return btn diff --git a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift index 201e3395..2b2be313 100644 --- a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift +++ b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift @@ -32,8 +32,14 @@ final class LoginViewPresenter: NSObject { var whenAfterLogout = false var whenAfterWithdrawal = false - init(viewController: LoginViewProtocol + private let socialLoginUseCase: SocialLoginUseCaseInterface! + + init( + socialLoginUseCase: SocialLoginUseCaseInterface, + viewController: LoginViewProtocol ) { + self.socialLoginUseCase = socialLoginUseCase + self.viewController = viewController } @@ -154,6 +160,10 @@ final class LoginViewPresenter: NSObject { } } } + + func loadURL(type: LoginType) { + socialLoginUseCase.loadURL(type: type) + } } // MARK: Apple Login 처리 설정 diff --git a/Podfile b/Podfile index 2de47bd5..c567f5cf 100644 --- a/Podfile +++ b/Podfile @@ -16,6 +16,18 @@ pod 'RxSwift', '6.6.0' pod 'RxCocoa', '6.6.0' pod 'RxDataSources', '~> 5.0' +# social login + +# 추후 SwiftUI 사용 시 'GoogleSignInSwiftSupport' 추가 필요 +pod 'GoogleSignIn' +pod 'KakaoSDKCommon' +pod 'RxKakaoSDKCommon' +pod 'KakaoSDKAuth' +pod 'RxKakaoSDKAuth' +pod 'KakaoSDKUser' +pod 'RxKakaoSDKUser' +pod 'naveridlogin-sdk-ios' + # Pods for AVIRO end diff --git a/Podfile.lock b/Podfile.lock index 2d3d2022..56ee51c5 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,10 +1,37 @@ PODS: + - Alamofire (5.9.1) - AmplitudeSwift (1.4.5): - AnalyticsConnector (~> 1.0.1) - AnalyticsConnector (1.0.3) + - AppAuth (1.7.5): + - AppAuth/Core (= 1.7.5) + - AppAuth/ExternalUserAgent (= 1.7.5) + - AppAuth/Core (1.7.5) + - AppAuth/ExternalUserAgent (1.7.5): + - AppAuth/Core - Differentiator (5.0.0) + - GoogleSignIn (7.1.0): + - AppAuth (< 2.0, >= 1.7.3) + - GTMAppAuth (< 5.0, >= 4.1.1) + - GTMSessionFetcher/Core (~> 3.3) + - GTMAppAuth (4.1.1): + - AppAuth/Core (~> 1.7) + - GTMSessionFetcher/Core (< 4.0, >= 3.3) + - GTMSessionFetcher/Core (3.5.0) + - KakaoSDKAuth (2.22.3): + - KakaoSDKCommon (= 2.22.3) + - KakaoSDKCommon (2.22.3): + - KakaoSDKCommon/Common (= 2.22.3) + - KakaoSDKCommon/Network (= 2.22.3) + - KakaoSDKCommon/Common (2.22.3) + - KakaoSDKCommon/Network (2.22.3): + - Alamofire (~> 5.9.0) + - KakaoSDKCommon/Common (= 2.22.3) + - KakaoSDKUser (2.22.3): + - KakaoSDKAuth (= 2.22.3) - KeychainSwift (22.0.0) - lottie-ios (4.4.1) + - naveridlogin-sdk-ios (4.2.1) - NMapsGeometry (1.0.2) - NMapsMap (3.18.1): - NMapsGeometry @@ -13,6 +40,11 @@ PODS: - Realm/Headers (10.48.0) - RealmSwift (10.48.0): - Realm (= 10.48.0) + - RxAlamofire (6.1.1): + - RxAlamofire/Core (= 6.1.1) + - RxAlamofire/Core (6.1.1): + - Alamofire (~> 5.4) + - RxSwift (~> 6.0) - RxBlocking (6.6.0): - RxSwift (= 6.6.0) - RxCocoa (6.6.0): @@ -22,6 +54,23 @@ PODS: - Differentiator (~> 5.0) - RxCocoa (~> 6.0) - RxSwift (~> 6.0) + - RxKakaoSDKAuth (2.22.3): + - KakaoSDKAuth (= 2.22.3) + - RxKakaoSDKCommon (= 2.22.3) + - RxKakaoSDKCommon (2.22.3): + - RxKakaoSDKCommon/Common (= 2.22.3) + - RxKakaoSDKCommon/Network (= 2.22.3) + - RxKakaoSDKCommon/Common (2.22.3): + - KakaoSDKCommon/Common (= 2.22.3) + - RxCocoa + - RxSwift (~> 6.0) + - RxKakaoSDKCommon/Network (2.22.3): + - KakaoSDKCommon/Network (= 2.22.3) + - RxAlamofire (~> 6.0) + - RxKakaoSDKCommon/Common (= 2.22.3) + - RxKakaoSDKUser (2.22.3): + - KakaoSDKUser (= 2.22.3) + - RxKakaoSDKAuth (= 2.22.3) - RxRelay (6.6.0): - RxSwift (= 6.6.0) - RxSwift (6.6.0) @@ -31,54 +80,88 @@ PODS: DEPENDENCIES: - AmplitudeSwift (= 1.4.5) + - GoogleSignIn + - KakaoSDKAuth + - KakaoSDKCommon + - KakaoSDKUser - KeychainSwift (= 22.0.0) - lottie-ios (= 4.4.1) + - naveridlogin-sdk-ios - NMapsMap - RealmSwift (= 10.48.0) - RxBlocking (= 6.6.0) - RxCocoa (= 6.6.0) - RxDataSources (~> 5.0) + - RxKakaoSDKAuth + - RxKakaoSDKCommon + - RxKakaoSDKUser - RxSwift (= 6.6.0) - RxTest (= 6.6.0) - Toast-Swift (= 5.1.0) SPEC REPOS: trunk: + - Alamofire - AmplitudeSwift - AnalyticsConnector + - AppAuth - Differentiator + - GoogleSignIn + - GTMAppAuth + - GTMSessionFetcher + - KakaoSDKAuth + - KakaoSDKCommon + - KakaoSDKUser - KeychainSwift - lottie-ios + - naveridlogin-sdk-ios - NMapsGeometry - NMapsMap - Realm - RealmSwift + - RxAlamofire - RxBlocking - RxCocoa - RxDataSources + - RxKakaoSDKAuth + - RxKakaoSDKCommon + - RxKakaoSDKUser - RxRelay - RxSwift - RxTest - Toast-Swift SPEC CHECKSUMS: + Alamofire: f36a35757af4587d8e4f4bfa223ad10be2422b8c AmplitudeSwift: 4daa595b157c73b9bc5f225f9b8faead90d044b3 AnalyticsConnector: a53214d38ae22734c6266106c0492b37832633a9 + AppAuth: 501c04eda8a8d11f179dbe8637b7a91bb7e5d2fa Differentiator: e8497ceab83c1b10ca233716d547b9af21b9344d + GoogleSignIn: d4281ab6cf21542b1cfaff85c191f230b399d2db + GTMAppAuth: f69bd07d68cd3b766125f7e072c45d7340dea0de + GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 + KakaoSDKAuth: 6ac329e616e9506b5d6dd5640d79363d066ad835 + KakaoSDKCommon: 053dbf0438933101244fccd92ebc389ab6bdbaec + KakaoSDKUser: ad33a38ec7f1da566c882ed498022923198599a7 KeychainSwift: 72f81155e1cb01c1bc4da296e4ce2cfcff556a12 lottie-ios: e047b1d2e6239b787cc5e9755b988869cf190494 + naveridlogin-sdk-ios: d5f9d92905a7e964976ebfdd665bee5fb75845c5 NMapsGeometry: 4e02554fa9880ef02ed96b075dc84355d6352479 NMapsMap: e879088eeee2d1e3b97f0a609076e1824dce2cad Realm: ac7ec3bd884b42282431fc414cc0bb3e92d726cf RealmSwift: 4eb8b254ebe413cbc486c5a366f2a315b54d75f7 + RxAlamofire: beb75a1c452d0de225651db4903f5d29d034a620 RxBlocking: fbd1f8501443024f686e556f36dac79b0d5f4d7c RxCocoa: 44a80de90e25b739b5aeaae3c8c371a32e3343cc RxDataSources: aa47cc1ed6c500fa0dfecac5c979b723542d79cf + RxKakaoSDKAuth: 5d53510a213e5e1d37b22b112b9fd4f221cf5bf3 + RxKakaoSDKCommon: 839e685baeafd68145eeb1eb1c7895d1dc35a2eb + RxKakaoSDKUser: 73ed92715727e298dfc24387e6ab2e5232fad407 RxRelay: 45eaa5db8ee4fb50e5ebd57deec0159e97fa51e6 RxSwift: a4b44f7d24599f674deebd1818eab82e58410632 RxTest: a23f26bb53a5e146a0a69db4f0fa0b69001ce7f4 Toast-Swift: dd369e68ee529f542c65bd0d0c6c50cd743cf6f2 -PODFILE CHECKSUM: e9b7a91653949d8e46be43c789e3f27ea4bfe38e +PODFILE CHECKSUM: b3f4b7aacc2811bb0eb23e3ea0a0f8c511e9d59a COCOAPODS: 1.15.2 From 4a2639515ffb1f6cfb5dde0f7550cf638345c59b Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Sun, 7 Jul 2024 00:22:13 +0900 Subject: [PATCH 17/37] =?UTF-8?q?[Feat]:=20Naver=20Login=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 20 ++++ AVIRO/App/AppDelegate.swift | 15 ++- AVIRO/Common/Cancellable.swift | 12 ++ .../Targets/Auth/AuthAPIEndpoints.swift | 8 ++ .../NaverAuthRepository.swift | 107 +++++++++++++++++- .../Repositories/Utils/RepositoryTask.swift | 18 +++ .../Domain/UseCases/SocialLoginUseCase.swift | 12 +- .../DataTransfer/DataTransferService.swift | 4 +- .../NetworkService/NetworkService.swift | 2 +- 9 files changed, 188 insertions(+), 10 deletions(-) create mode 100644 AVIRO/Common/Cancellable.swift create mode 100644 AVIRO/Data/Network/Targets/Auth/AuthAPIEndpoints.swift create mode 100644 AVIRO/Data/Repositories/Utils/RepositoryTask.swift diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 39b2ea04..16eed80c 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -143,6 +143,9 @@ C562B6E22B387B8700CE5D4C /* ChallengeInfoPresentationAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C562B6E12B387B8700CE5D4C /* ChallengeInfoPresentationAnimator.swift */; }; C562B6E42B387CA200CE5D4C /* ChallengeInfoPresentaionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C562B6E32B387CA200CE5D4C /* ChallengeInfoPresentaionDelegate.swift */; }; C564DAB32BA57240002174B4 /* AVIROWellcome+DTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = C564DAB22BA57240002174B4 /* AVIROWellcome+DTO.swift */; }; + C566EF622C398EC6009E58DD /* AuthAPIEndpoints.swift in Sources */ = {isa = PBXBuildFile; fileRef = C566EF612C398EC6009E58DD /* AuthAPIEndpoints.swift */; }; + C566EF652C39931B009E58DD /* RepositoryTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = C566EF642C39931B009E58DD /* RepositoryTask.swift */; }; + C566EF672C399333009E58DD /* Cancellable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C566EF662C399333009E58DD /* Cancellable.swift */; }; C567C1502A56611500D4B426 /* TopCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C567C14F2A56611500D4B426 /* TopCell.swift */; }; C568577D2A70E1F600F52715 /* MenuPlusButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C568577C2A70E1F600F52715 /* MenuPlusButton.swift */; }; C56857802A7113C600F52715 /* NormalTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C568577F2A7113C600F52715 /* NormalTableViewCell.swift */; }; @@ -481,6 +484,9 @@ C562B6E12B387B8700CE5D4C /* ChallengeInfoPresentationAnimator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChallengeInfoPresentationAnimator.swift; sourceTree = ""; }; C562B6E32B387CA200CE5D4C /* ChallengeInfoPresentaionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChallengeInfoPresentaionDelegate.swift; sourceTree = ""; }; C564DAB22BA57240002174B4 /* AVIROWellcome+DTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AVIROWellcome+DTO.swift"; sourceTree = ""; }; + C566EF612C398EC6009E58DD /* AuthAPIEndpoints.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthAPIEndpoints.swift; sourceTree = ""; }; + C566EF642C39931B009E58DD /* RepositoryTask.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepositoryTask.swift; sourceTree = ""; }; + C566EF662C399333009E58DD /* Cancellable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Cancellable.swift; sourceTree = ""; }; C567C14F2A56611500D4B426 /* TopCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopCell.swift; sourceTree = ""; }; C568577C2A70E1F600F52715 /* MenuPlusButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuPlusButton.swift; sourceTree = ""; }; C568577F2A7113C600F52715 /* NormalTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NormalTableViewCell.swift; sourceTree = ""; }; @@ -1527,6 +1533,14 @@ path = ETC; sourceTree = ""; }; + C566EF632C39930D009E58DD /* Utils */ = { + isa = PBXGroup; + children = ( + C566EF642C39931B009E58DD /* RepositoryTask.swift */, + ); + path = Utils; + sourceTree = ""; + }; C567C14D2A5658C700D4B426 /* Login */ = { isa = PBXGroup; children = ( @@ -1909,6 +1923,7 @@ C5BA9E042BED1CD2004FA06E /* Repositories */ = { isa = PBXGroup; children = ( + C566EF632C39930D009E58DD /* Utils */, C5ED992D2C0880800077B2F9 /* StoreListRepositories */, C5ED992C2C08807A0077B2F9 /* BookmarkListRepositories */, C5ED992B2C0880710077B2F9 /* StoreRepositories */, @@ -2001,6 +2016,7 @@ isa = PBXGroup; children = ( C5BA9E162BED2585004FA06E /* printIfDebug.swift */, + C566EF662C399333009E58DD /* Cancellable.swift */, ); path = Common; sourceTree = ""; @@ -2636,6 +2652,7 @@ C5ED99952C0894860077B2F9 /* Auth */ = { isa = PBXGroup; children = ( + C566EF612C398EC6009E58DD /* AuthAPIEndpoints.swift */, ); path = Auth; sourceTree = ""; @@ -2950,6 +2967,8 @@ C5C915492A777F8500C7CB93 /* SearchField.swift in Sources */, C52066212A7CA9050038ECCD /* MainField.swift in Sources */, C5ED99622C088FB50077B2F9 /* UserChallengeRepositoryInterface.swift in Sources */, + C566EF652C39931B009E58DD /* RepositoryTask.swift in Sources */, + C566EF622C398EC6009E58DD /* AuthAPIEndpoints.swift in Sources */, C5EB510B2A209FD300B29CC1 /* HomeSearchPresenter.swift in Sources */, C5DBF8412B3A787800668B0D /* CGFloat+Extension.swift in Sources */, C52066262A7CC3CE0038ECCD /* NoHistoryLabelView.swift in Sources */, @@ -2971,6 +2990,7 @@ C50DB7572A9B8DF80078B501 /* EditLocationAddressTextView.swift in Sources */, C595ACD12A84A4EB00D35123 /* PlaceSummaryView.swift in Sources */, C520663A2A808DC40038ECCD /* PlaceListHeaderView.swift in Sources */, + C566EF672C399333009E58DD /* Cancellable.swift in Sources */, C52066382A808DAD0038ECCD /* HistoryHeaderView.swift in Sources */, C5ED99842C0893210077B2F9 /* StoreListUseCase.swift in Sources */, C5C290742A85E4EC00ED5DCE /* PlaceSegmentedControlView.swift in Sources */, diff --git a/AVIRO/App/AppDelegate.swift b/AVIRO/App/AppDelegate.swift index 6034427c..e6361dc7 100644 --- a/AVIRO/App/AppDelegate.swift +++ b/AVIRO/App/AppDelegate.swift @@ -6,7 +6,7 @@ // import UIKit -import AuthenticationServices +// import AuthenticationServices import NMapsMap import AmplitudeSwift @@ -77,6 +77,19 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } private func registerRepository() { + // 수정 필요 +// +// let host = AVIROConfiguration.host +// let apiKey = AVIROConfiguration.apikey +// +// let headers = [ +// "Content-Type": "application/json", +// "X-API-KEY": "\(AVIROConfiguration.apikey)" +// ] +// +// let config = APIDataNetworkConfig(baseURL: <#T##URL#>) +// let apiDataNetwork = NetworkService(config: <#T##any NetworkConfigurable#>) + DIContainer.shared.register( AppleAuthRepository.self, dependency: AppleAuthRepository() diff --git a/AVIRO/Common/Cancellable.swift b/AVIRO/Common/Cancellable.swift new file mode 100644 index 00000000..7097d466 --- /dev/null +++ b/AVIRO/Common/Cancellable.swift @@ -0,0 +1,12 @@ +// +// Cancellable.swift +// AVIRO +// +// Created by 전성훈 on 7/6/24. +// + +import Foundation + +protocol Cancellable { + func cancel() +} diff --git a/AVIRO/Data/Network/Targets/Auth/AuthAPIEndpoints.swift b/AVIRO/Data/Network/Targets/Auth/AuthAPIEndpoints.swift new file mode 100644 index 00000000..28a0b0a8 --- /dev/null +++ b/AVIRO/Data/Network/Targets/Auth/AuthAPIEndpoints.swift @@ -0,0 +1,8 @@ +// +// AuthAPIEndpoints.swift +// AVIRO +// +// Created by 전성훈 on 7/6/24. +// + +import Foundation diff --git a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift index c5718a61..4e339d14 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift @@ -9,10 +9,27 @@ import Foundation import NaverThirdPartyLogin -final class NaverAuthRepository { - let instance = NaverThirdPartyLoginConnection.getSharedInstance() +final class NaverAuthRepository: NSObject { +// private let aviroDataTransferService: DataTransferService + private let naverDataTransferService: DataTransferService + private let instance = NaverThirdPartyLoginConnection.getSharedInstance() + private let backgroundQueue: DataTransferDispatchQueue - init() { + init( +// dataTransferService: DataTransferService, + backgroundQueue: DataTransferDispatchQueue = DispatchQueue.global(qos: .userInitiated) + ) { + self.backgroundQueue = backgroundQueue + + let urlStr = "https://openapi.naver.com/" + let url = URL(string: urlStr)! + let naverAPIConfig = APIDataNetworkConfig(baseURL: url) + +// self.aviroDataTransferService = dataTransferService + self.naverDataTransferService = DataTransferService( + networkService: NetworkService(config: naverAPIConfig) + ) + guard let keyURL = Bundle.main.url(forResource: "API", withExtension: "plist"), let dictionary = NSDictionary(contentsOf: keyURL) as? [String: Any] else { return } @@ -35,18 +52,98 @@ final class NaverAuthRepository { extension NaverAuthRepository: NaverAuthRepositoryInterface { func loadNaverApp() { + instance?.delegate = self instance?.requestThirdPartyLogin() } func login(completion: @escaping (Result) -> Void) { - + } func logout(completion: @escaping (Result) -> Void) { - + instance?.requestDeleteToken() } func autoLogin(completion: @escaping (Result) -> Void) { } + + private func getInfo() { + print("Test") + guard let isValidAccessToken = instance?.isValidAccessTokenExpireTimeNow() else { return } + + if !isValidAccessToken { return } + + guard let tokenType = instance?.tokenType, + let accessType = instance?.accessToken, + let refreshToke = instance?.refreshToken + else { return } + + let authorization = "\(tokenType) \(accessType)" + + print(authorization) + + let endpoint = EndPoint( + path: "v1/nid/me", + method: .get, + headerParameters: ["Authorization": authorization] + ) + + let req = naverDataTransferService.request( + with: endpoint, + on: backgroundQueue) { result in + switch result { + case .success(let userInfo): + let contentText = """ + userId : \(userInfo.id) + """ + + print(contentText) + case .failure(let error): + print("Error \(error)") + } + } + + } +} + +extension NaverAuthRepository: NaverThirdPartyLoginConnectionDelegate { + func oauth20ConnectionDidFinishRequestACTokenWithAuthCode() { + print("Success Login") + getInfo() + } + + func oauth20ConnectionDidFinishRequestACTokenWithRefreshToken() { + print("TestTest") + instance?.accessToken + } + + func oauth20ConnectionDidFinishDeleteToken() { + print("Log out") + + } + + func oauth20Connection(_ oauthConnection: NaverThirdPartyLoginConnection!, didFailWithError error: (any Error)!) { + print("error") + } +} + +struct NaverUserInfoResponseDTO: Decodable { + let id: String +// let name: String + + private enum RootKeys: String, CodingKey { + case response + } + + private enum ResponseKeys: String, CodingKey { + case id + } + + init(from decoder: Decoder) throws { + let rootContainer = try decoder.container(keyedBy: RootKeys.self) + let responseContainer = try rootContainer.nestedContainer(keyedBy: ResponseKeys.self, forKey: .response) + + id = try responseContainer.decode(String.self, forKey: .id) + } } diff --git a/AVIRO/Data/Repositories/Utils/RepositoryTask.swift b/AVIRO/Data/Repositories/Utils/RepositoryTask.swift new file mode 100644 index 00000000..90ff4e1e --- /dev/null +++ b/AVIRO/Data/Repositories/Utils/RepositoryTask.swift @@ -0,0 +1,18 @@ +// +// RepositoryTask.swift +// AVIRO +// +// Created by 전성훈 on 7/6/24. +// + +import Foundation + +class RepositoryTask: Cancellable { + var networkTask: NetworkCancellable? + var isCancelled: Bool = false + + func cancel() { + networkTask?.cancel() + isCancelled = true + } +} diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index 91e1d35b..baeb9946 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -50,7 +50,17 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { type: LoginType, completion: @escaping (Result) -> Void ) { - + switch type { + case .apple: + break + case .google: + break + case .kakao: + break + case .naver: + naverLoginRepository.login(completion: { result in + }) + } } func logout( diff --git a/AVIRO/Infrastructure/Network/DataTransfer/DataTransferService.swift b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferService.swift index e6990c73..1c50e136 100644 --- a/AVIRO/Infrastructure/Network/DataTransfer/DataTransferService.swift +++ b/AVIRO/Infrastructure/Network/DataTransfer/DataTransferService.swift @@ -58,8 +58,8 @@ final class DataTransferService { init( networkService: NetworkService, - errorResolver: DataTransferErrorResolverProtocol, - errorLogger: DataTransferErrorLoggerProtocol + errorResolver: DataTransferErrorResolverProtocol = DataTransferErrorResolver(), + errorLogger: DataTransferErrorLoggerProtocol = DataTransferErrorLogger() ) { self.networkService = networkService self.errorResolver = errorResolver diff --git a/AVIRO/Infrastructure/Network/NetworkService/NetworkService.swift b/AVIRO/Infrastructure/Network/NetworkService/NetworkService.swift index 68e84e71..7de033d2 100644 --- a/AVIRO/Infrastructure/Network/NetworkService/NetworkService.swift +++ b/AVIRO/Infrastructure/Network/NetworkService/NetworkService.swift @@ -38,7 +38,7 @@ final class NetworkService { init( config: NetworkConfigurable, sessionManager: NetworkSessionManager = NetworkSessionManager(), - logger: NetworkErrorLogger + logger: NetworkErrorLogger = NetworkErrorLogger() ) { self.config = config self.sessionManager = sessionManager From dd14db8c9ddbbf19dea6917fe8184220405deaef Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Sun, 7 Jul 2024 17:21:43 +0900 Subject: [PATCH 18/37] =?UTF-8?q?[Feat]:=20Kakao=20Login=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO/App/SceneDelegate.swift | 12 ++++- .../AppleAuthRepository.swift | 2 +- .../GoogleAuthRepository.swift | 2 +- .../KakaoAuthRepository.swift | 44 +++++++++++++++-- .../NaverAuthRepository.swift | 17 ++----- .../SocialLoginRepositoryInterface.swift | 16 ------- .../Domain/UseCases/SocialLoginUseCase.swift | 47 ++++++++----------- .../ViewController/LoginViewController.swift | 4 +- .../ViewPresenter/LoginViewPresenter.swift | 8 ++-- 9 files changed, 84 insertions(+), 68 deletions(-) diff --git a/AVIRO/App/SceneDelegate.swift b/AVIRO/App/SceneDelegate.swift index 1ae9bca5..04864293 100644 --- a/AVIRO/App/SceneDelegate.swift +++ b/AVIRO/App/SceneDelegate.swift @@ -8,6 +8,7 @@ import UIKit import NaverThirdPartyLogin +import KakaoSDKAuth class SceneDelegate: UIResponder, UIWindowSceneDelegate { @@ -39,13 +40,20 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { guard let urlContext = URLContexts.first else { return } let url = urlContext.url - // URL의 스킴을 확인합니다. + // Naver if url.scheme == "com.aviro.ios" { NaverThirdPartyLoginConnection .getSharedInstance() .receiveAccessToken(url) - } else { + return + } + + // Kakao + if AuthApi.isKakaoTalkLoginUrl(url) { + _ = AuthController.handleOpenUrl(url: url) + + return } } } diff --git a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift index d7b88060..b6810c52 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift @@ -11,7 +11,7 @@ final class AppleAuthRepository { init() { } } -extension AppleAuthRepository: AppleAuthRepositoryInterface { +extension AppleAuthRepository: SocialLoginRepositoryInterface { func login(completion: @escaping (Result) -> Void) { } diff --git a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift index e48463e3..89d1ec7a 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift @@ -11,7 +11,7 @@ final class GoogleAuthRepository { init() { } } -extension GoogleAuthRepository: GoogleAuthRepositoryInterface { +extension GoogleAuthRepository: SocialLoginRepositoryInterface { func login(completion: @escaping (Result) -> Void) { } diff --git a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift index 08ddcefe..d9a052f4 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift @@ -7,20 +7,56 @@ import Foundation +import KakaoSDKCommon +import KakaoSDKAuth +import KakaoSDKUser + final class KakaoAuthRepository { - init() { } + init() { + guard let keyURL = Bundle.main.url(forResource: "API", withExtension: "plist"), + let dictionary = NSDictionary(contentsOf: keyURL) as? [String: Any] else { return } + + let appkey = (dictionary["Kakao_Native_Key"] as? String)! + + KakaoSDK.initSDK(appKey: appkey) + } } -extension KakaoAuthRepository: KakaoAuthRepositoryInterface { +extension KakaoAuthRepository: SocialLoginRepositoryInterface { func login(completion: @escaping (Result) -> Void) { - + if UserApi.isKakaoTalkLoginAvailable() { + UserApi.shared.loginWithKakaoTalk { [weak self] token, error in + if let error = error { + print(error) + } else { + print("token: \(token)") + + self?.getInfo() + } + } + } } func logout(completion: @escaping (Result) -> Void) { - + UserApi.shared.logout {(error) in + if let error = error { + print(error) + } + else { + print("logout() success.") + } + } } func autoLogin(completion: @escaping (Result) -> Void) { } + + private func getInfo() { + UserApi.shared.me { user, error in + if let error = error { print(error) } + let id = user?.id + print(id) + } + } } diff --git a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift index 4e339d14..e95fddc1 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift @@ -50,16 +50,12 @@ final class NaverAuthRepository: NSObject { } } -extension NaverAuthRepository: NaverAuthRepositoryInterface { - func loadNaverApp() { +extension NaverAuthRepository: SocialLoginRepositoryInterface { + func login(completion: @escaping (Result) -> Void) { instance?.delegate = self instance?.requestThirdPartyLogin() } - func login(completion: @escaping (Result) -> Void) { - - } - func logout(completion: @escaping (Result) -> Void) { instance?.requestDeleteToken() } @@ -69,7 +65,6 @@ extension NaverAuthRepository: NaverAuthRepositoryInterface { } private func getInfo() { - print("Test") guard let isValidAccessToken = instance?.isValidAccessTokenExpireTimeNow() else { return } if !isValidAccessToken { return } @@ -80,9 +75,7 @@ extension NaverAuthRepository: NaverAuthRepositoryInterface { else { return } let authorization = "\(tokenType) \(accessType)" - - print(authorization) - + let endpoint = EndPoint( path: "v1/nid/me", method: .get, @@ -136,13 +129,13 @@ struct NaverUserInfoResponseDTO: Decodable { case response } - private enum ResponseKeys: String, CodingKey { + private enum CodingKeys: String, CodingKey { case id } init(from decoder: Decoder) throws { let rootContainer = try decoder.container(keyedBy: RootKeys.self) - let responseContainer = try rootContainer.nestedContainer(keyedBy: ResponseKeys.self, forKey: .response) + let responseContainer = try rootContainer.nestedContainer(keyedBy: CodingKeys.self, forKey: .response) id = try responseContainer.decode(String.self, forKey: .id) } diff --git a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift index 9f0381fe..644596ed 100644 --- a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift +++ b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift @@ -14,19 +14,3 @@ protocol SocialLoginRepositoryInterface { func logout(completion: @escaping (Result) -> Void) func autoLogin(completion: @escaping (Result) -> Void) } - -protocol AppleAuthRepositoryInterface: SocialLoginRepositoryInterface { - -} - -protocol GoogleAuthRepositoryInterface: SocialLoginRepositoryInterface { - -} - -protocol KakaoAuthRepositoryInterface: SocialLoginRepositoryInterface { - -} - -protocol NaverAuthRepositoryInterface: SocialLoginRepositoryInterface { - func loadNaverApp() -} diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index baeb9946..9ca41c4e 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -8,22 +8,21 @@ import Foundation protocol SocialLoginUseCaseInterface: AnyObject { - func loadURL(type: LoginType) func login(type: LoginType, completion: @escaping (Result) -> Void) func logout(type: LoginType, completion: @escaping (Result) -> Void) } final class SocialLoginUseCase { - private let appleLoginRepository: AppleAuthRepositoryInterface - private let googleLoginRepository: GoogleAuthRepositoryInterface - private let kakaoLoginRepository: KakaoAuthRepositoryInterface - private let naverLoginRepository: NaverAuthRepositoryInterface + private let appleLoginRepository: SocialLoginRepositoryInterface + private let googleLoginRepository: SocialLoginRepositoryInterface + private let kakaoLoginRepository: SocialLoginRepositoryInterface + private let naverLoginRepository: SocialLoginRepositoryInterface init( - appleLoginRepository: AppleAuthRepositoryInterface, - googleLoginRepository: GoogleAuthRepositoryInterface, - kakaoLoginRepository: KakaoAuthRepositoryInterface, - naverLoginRepository: NaverAuthRepositoryInterface + appleLoginRepository: SocialLoginRepositoryInterface, + googleLoginRepository: SocialLoginRepositoryInterface, + kakaoLoginRepository: SocialLoginRepositoryInterface, + naverLoginRepository: SocialLoginRepositoryInterface ) { self.appleLoginRepository = appleLoginRepository self.googleLoginRepository = googleLoginRepository @@ -33,33 +32,27 @@ final class SocialLoginUseCase { } extension SocialLoginUseCase: SocialLoginUseCaseInterface { - func loadURL(type: LoginType) { - switch type { - case .apple: - break - case .google: - break - case .kakao: - break - case .naver: - naverLoginRepository.loadNaverApp() - } - } - func login( type: LoginType, completion: @escaping (Result) -> Void ) { switch type { case .apple: - break + appleLoginRepository.login { result in + + } case .google: - break + googleLoginRepository.login { result in + + } case .kakao: - break + kakaoLoginRepository.login { result in + + } case .naver: - naverLoginRepository.login(completion: { result in - }) + naverLoginRepository.login { result in + + } } } diff --git a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift index de3ad276..921ad104 100644 --- a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift +++ b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift @@ -55,7 +55,7 @@ final class LoginViewController: UIViewController { btn.setButtonStyle(type: .naver) btn.didTappedButton = { [weak self] in // TODO: 함수 위치 변경하기 - self?.presenter.loadURL(type: .naver) + self?.presenter.login(type: .naver) } return btn @@ -66,7 +66,7 @@ final class LoginViewController: UIViewController { btn.setButtonStyle(type: .kakao) btn.didTappedButton = { [weak self] in - print("kakao") + self?.presenter.login(type: .kakao) } return btn diff --git a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift index 2b2be313..38a0cda4 100644 --- a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift +++ b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift @@ -160,9 +160,11 @@ final class LoginViewPresenter: NSObject { } } } - - func loadURL(type: LoginType) { - socialLoginUseCase.loadURL(type: type) + + func login(type: LoginType) { + socialLoginUseCase.login(type: type) { result in + + } } } From d73d8bcb95353d6cb4040ed81de4705346736b66 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Sun, 7 Jul 2024 17:47:43 +0900 Subject: [PATCH 19/37] =?UTF-8?q?[Feat]:=20Google=20Login=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO/App/SceneDelegate.swift | 5 ++++ .../GoogleAuthRepository.swift | 26 ++++++++++++++++++- .../NaverAuthRepository.swift | 5 ++-- .../ViewController/LoginViewController.swift | 4 +-- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/AVIRO/App/SceneDelegate.swift b/AVIRO/App/SceneDelegate.swift index 04864293..3cc8ffe1 100644 --- a/AVIRO/App/SceneDelegate.swift +++ b/AVIRO/App/SceneDelegate.swift @@ -9,6 +9,7 @@ import UIKit import NaverThirdPartyLogin import KakaoSDKAuth +import GoogleSignIn class SceneDelegate: UIResponder, UIWindowSceneDelegate { @@ -39,6 +40,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { guard let urlContext = URLContexts.first else { return } let url = urlContext.url + print(url) // Naver if url.scheme == "com.aviro.ios" { @@ -55,5 +57,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { return } + + // Google + GIDSignIn.sharedInstance.handle(url) } } diff --git a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift index 89d1ec7a..2d4de8a3 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift @@ -7,13 +7,37 @@ import Foundation +import GoogleSignIn + final class GoogleAuthRepository { - init() { } + private let clientID: String? + + init() { + guard let keyURL = Bundle.main.url(forResource: "API", withExtension: "plist"), + let dictionary = NSDictionary(contentsOf: keyURL) as? [String: Any] else { + self.clientID = "" + return + } + + self.clientID = dictionary["Google_Client_ID"] as? String + } } extension GoogleAuthRepository: SocialLoginRepositoryInterface { func login(completion: @escaping (Result) -> Void) { + guard let clientID = self.clientID else { return } + guard let viewController = UIApplication.getMostTopViewController() else { return } + + let singinConfig = GIDConfiguration(clientID: clientID) + + GIDSignIn.sharedInstance.signIn(withPresenting: viewController) { [weak self] userInfo, error in + print("userInfo: ", userInfo) + print("accessToken: ", userInfo?.user.accessToken) + print("idToken: ", userInfo?.user.idToken) + print("userID: ", userInfo?.user.userID) + } +// GIDSignIn.sharedInstance.signin } func logout(completion: @escaping (Result) -> Void) { diff --git a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift index e95fddc1..aaa7324c 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift @@ -12,9 +12,10 @@ import NaverThirdPartyLogin final class NaverAuthRepository: NSObject { // private let aviroDataTransferService: DataTransferService private let naverDataTransferService: DataTransferService - private let instance = NaverThirdPartyLoginConnection.getSharedInstance() private let backgroundQueue: DataTransferDispatchQueue - + + private let instance = NaverThirdPartyLoginConnection.getSharedInstance() + init( // dataTransferService: DataTransferService, backgroundQueue: DataTransferDispatchQueue = DispatchQueue.global(qos: .userInitiated) diff --git a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift index 921ad104..5bc4323a 100644 --- a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift +++ b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift @@ -77,7 +77,7 @@ final class LoginViewController: UIViewController { btn.setButtonStyle(type: .google) btn.didTappedButton = { [weak self] in - print("google") + self?.presenter.login(type: .google) } return btn @@ -88,7 +88,7 @@ final class LoginViewController: UIViewController { btn.setButtonStyle(type: .apple) btn.didTappedButton = { [weak self] in - print("apple") + self?.presenter.login(type: .apple) } return btn From 860fce9397bcaf388c47b0f89477717187d0f1e9 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Mon, 8 Jul 2024 00:27:29 +0900 Subject: [PATCH 20/37] =?UTF-8?q?[Feat]:=20Apple=20Login=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppleAuthRepository.swift | 45 ++++++++++++++++--- .../GoogleAuthRepository.swift | 6 --- .../NaverAuthRepository.swift | 1 + .../SocialLoginRepositoryInterface.swift | 1 - .../Domain/UseCases/SocialLoginUseCase.swift | 31 +++++-------- .../ViewPresenter/LoginViewPresenter.swift | 38 +++++++++++----- 6 files changed, 80 insertions(+), 42 deletions(-) diff --git a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift index b6810c52..60782a0b 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift @@ -6,21 +6,56 @@ // import Foundation +import AuthenticationServices -final class AppleAuthRepository { - init() { } +final class AppleAuthRepository: NSObject { + private let backgroundQueue: DataTransferDispatchQueue + + init( + backgroundQueue: DataTransferDispatchQueue = DispatchQueue.global(qos: .userInitiated) + ) { + self.backgroundQueue = backgroundQueue + } } extension AppleAuthRepository: SocialLoginRepositoryInterface { func login(completion: @escaping (Result) -> Void) { + let request = ASAuthorizationAppleIDProvider().createRequest() + request.requestedScopes = [.fullName, .email] + let authorizationController = ASAuthorizationController(authorizationRequests: [request]) + authorizationController.delegate = self + authorizationController.performRequests() } func logout(completion: @escaping (Result) -> Void) { } - - func autoLogin(completion: @escaping (Result) -> Void) { - +} + +extension AppleAuthRepository: ASAuthorizationControllerDelegate { + func authorizationController( + controller: ASAuthorizationController, + didCompleteWithAuthorization authorization: ASAuthorization + ) { + if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { + guard let authorizationCode = appleIDCredential.authorizationCode, + let identityToken = appleIDCredential.identityToken else { return } + + let code = String(data: authorizationCode, encoding: .utf8)! + let token = String(data: identityToken, encoding: .utf8)! + + let fullName = appleIDCredential.fullName?.formatted() ?? "" + let email = appleIDCredential.email ?? "" + + let model = AppleUserLoginModel( + identityToken: token, + authorizationCode: code, + userName: fullName, + userEmail: email + ) + + print(model) + } } } diff --git a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift index 2d4de8a3..2b63e903 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift @@ -36,15 +36,9 @@ extension GoogleAuthRepository: SocialLoginRepositoryInterface { print("idToken: ", userInfo?.user.idToken) print("userID: ", userInfo?.user.userID) } - -// GIDSignIn.sharedInstance.signin } func logout(completion: @escaping (Result) -> Void) { } - - func autoLogin(completion: @escaping (Result) -> Void) { - - } } diff --git a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift index aaa7324c..8dd8b631 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift @@ -141,3 +141,4 @@ struct NaverUserInfoResponseDTO: Decodable { id = try responseContainer.decode(String.self, forKey: .id) } } + diff --git a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift index 644596ed..816412de 100644 --- a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift +++ b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift @@ -12,5 +12,4 @@ protocol SocialLoginRepositoryInterface { func login(completion: @escaping (Result) -> Void) // TODO: Match the existing output func logout(completion: @escaping (Result) -> Void) - func autoLogin(completion: @escaping (Result) -> Void) } diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index 9ca41c4e..37611ebe 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -8,7 +8,7 @@ import Foundation protocol SocialLoginUseCaseInterface: AnyObject { - func login(type: LoginType, completion: @escaping (Result) -> Void) + func login(type: LoginType, requestLogin: @escaping (Result) -> Void, completion: @escaping (Result) -> Void) func logout(type: LoginType, completion: @escaping (Result) -> Void) } @@ -34,27 +34,20 @@ final class SocialLoginUseCase { extension SocialLoginUseCase: SocialLoginUseCaseInterface { func login( type: LoginType, - completion: @escaping (Result) -> Void + requestLogin: @escaping (Result) -> Void, + completion: @escaping (Result) -> Void ) { - switch type { - case .apple: - appleLoginRepository.login { result in - - } - case .google: - googleLoginRepository.login { result in - - } - case .kakao: - kakaoLoginRepository.login { result in - - } - case .naver: - naverLoginRepository.login { result in - + switch type { + case .apple: + appleLoginRepository + case .google: + googleLoginRepository + case .kakao: + kakaoLoginRepository + case .naver: + naverLoginRepository } } - } func logout( type: LoginType, diff --git a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift index 38a0cda4..af1261d5 100644 --- a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift +++ b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift @@ -15,7 +15,7 @@ protocol LoginViewProtocol: NSObject { func setupAttribute() func switchIsLoading(with loading: Bool) - + func pushTabBar() func pushRegistrationWhenAppleLogin(_ userModel: AVIROAppleUserSignUpDTO) @@ -50,7 +50,7 @@ final class LoginViewPresenter: NSObject { func viewWillAppear() { viewController?.switchIsLoading(with: false) - + if whenAfterWithdrawal { viewController?.afterWithdrawalUserShowAlert() whenAfterWithdrawal.toggle() @@ -61,12 +61,12 @@ final class LoginViewPresenter: NSObject { whenAfterLogout.toggle() } } - + // MARK: Clicke Apple Login func clickedAppleLogin() { let request = ASAuthorizationAppleIDProvider().createRequest() request.requestedScopes = [.fullName, .email] - + let authorizationController = ASAuthorizationController(authorizationRequests: [request]) authorizationController.delegate = self authorizationController.presentationContextProvider = self @@ -82,7 +82,7 @@ final class LoginViewPresenter: NSObject { identityToken: model.identityToken, authorizationCode: model.authorizationCode ) - + AVIROAPI.manager.checkAppleUserWhenLogin(with: checkAppleLoginModel) { [weak self] result in switch result { case .success(let success): @@ -160,11 +160,27 @@ final class LoginViewPresenter: NSObject { } } } - + func login(type: LoginType) { - socialLoginUseCase.login(type: type) { result in - - } + socialLoginUseCase.login( + type: type, + requestLogin: { result in + switch result { + case .success(let success): break + + case .failure(let failure): break + + } + }, + completion: { result in + switch result { + case .success(let success): + break + case .failure(let failure): + break + } + } + ) } } @@ -178,13 +194,13 @@ extension LoginViewPresenter: ASAuthorizationControllerDelegate { guard let authorizationCode = appleIDCredential.authorizationCode, let identityToken = appleIDCredential.identityToken else { return } - + let code = String(data: authorizationCode, encoding: .utf8)! let token = String(data: identityToken, encoding: .utf8)! let fullName = appleIDCredential.fullName?.formatted() ?? " " let email = appleIDCredential.email ?? " " - + let model = AppleUserLoginModel( identityToken: token, authorizationCode: code, From 6e043e67b9f5eb9de3dfaae431fbe927e07992a1 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Mon, 8 Jul 2024 01:04:31 +0900 Subject: [PATCH 21/37] =?UTF-8?q?[Feat]:=20Social=20Usecase,=20Repo=20Inte?= =?UTF-8?q?rface=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppleAuthRepository.swift | 7 ++- .../GoogleAuthRepository.swift | 7 +++ .../KakaoAuthRepository.swift | 11 +++-- .../NaverAuthRepository.swift | 11 +++-- .../SocialLoginRepositoryInterface.swift | 7 +-- .../Domain/UseCases/SocialLoginUseCase.swift | 44 ++++++++++++++----- .../ViewPresenter/LoginViewPresenter.swift | 9 +--- 7 files changed, 65 insertions(+), 31 deletions(-) diff --git a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift index 60782a0b..788d34f1 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift @@ -19,7 +19,12 @@ final class AppleAuthRepository: NSObject { } extension AppleAuthRepository: SocialLoginRepositoryInterface { - func login(completion: @escaping (Result) -> Void) { + func login( + requestLogin: () -> Void, + completion: @escaping (Result) -> Void + ) { + requestLogin() + let request = ASAuthorizationAppleIDProvider().createRequest() request.requestedScopes = [.fullName, .email] diff --git a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift index 2b63e903..4d457324 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift @@ -24,6 +24,13 @@ final class GoogleAuthRepository { } extension GoogleAuthRepository: SocialLoginRepositoryInterface { + func login( + requestLogin: () -> Void, + completion: @escaping (Result) -> Void + ) { + + } + func login(completion: @escaping (Result) -> Void) { guard let clientID = self.clientID else { return } guard let viewController = UIApplication.getMostTopViewController() else { return } diff --git a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift index d9a052f4..be20c4ef 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift @@ -23,6 +23,13 @@ final class KakaoAuthRepository { } extension KakaoAuthRepository: SocialLoginRepositoryInterface { + func login( + requestLogin: () -> Void, + completion: @escaping (Result) -> Void + ) { + + } + func login(completion: @escaping (Result) -> Void) { if UserApi.isKakaoTalkLoginAvailable() { UserApi.shared.loginWithKakaoTalk { [weak self] token, error in @@ -48,10 +55,6 @@ extension KakaoAuthRepository: SocialLoginRepositoryInterface { } } - func autoLogin(completion: @escaping (Result) -> Void) { - - } - private func getInfo() { UserApi.shared.me { user, error in if let error = error { print(error) } diff --git a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift index 8dd8b631..0ed9dffd 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift @@ -52,6 +52,13 @@ final class NaverAuthRepository: NSObject { } extension NaverAuthRepository: SocialLoginRepositoryInterface { + func login( + requestLogin: () -> Void, + completion: @escaping (Result) -> Void + ) { + + } + func login(completion: @escaping (Result) -> Void) { instance?.delegate = self instance?.requestThirdPartyLogin() @@ -61,10 +68,6 @@ extension NaverAuthRepository: SocialLoginRepositoryInterface { instance?.requestDeleteToken() } - func autoLogin(completion: @escaping (Result) -> Void) { - - } - private func getInfo() { guard let isValidAccessToken = instance?.isValidAccessTokenExpireTimeNow() else { return } diff --git a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift index 816412de..33cf83b4 100644 --- a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift +++ b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift @@ -8,8 +8,9 @@ import Foundation protocol SocialLoginRepositoryInterface { - // TODO: Make Result `User` Model - func login(completion: @escaping (Result) -> Void) - // TODO: Match the existing output + func login( + requestLogin: () -> Void, + completion: @escaping (Result) -> Void + ) func logout(completion: @escaping (Result) -> Void) } diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index 37611ebe..e13aefb2 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -8,8 +8,19 @@ import Foundation protocol SocialLoginUseCaseInterface: AnyObject { - func login(type: LoginType, requestLogin: @escaping (Result) -> Void, completion: @escaping (Result) -> Void) - func logout(type: LoginType, completion: @escaping (Result) -> Void) + func login( + type: LoginType, + requestLogin: () -> Void, + completion: @escaping (Result) -> Void + ) + func logout( + type: LoginType, + completion: @escaping (Result) -> Void + ) + func withdrawal( + type: LoginType, + completion: @escaping (Result) -> Void + ) } final class SocialLoginUseCase { @@ -34,20 +45,22 @@ final class SocialLoginUseCase { extension SocialLoginUseCase: SocialLoginUseCaseInterface { func login( type: LoginType, - requestLogin: @escaping (Result) -> Void, + requestLogin: () -> Void, completion: @escaping (Result) -> Void ) { - switch type { - case .apple: - appleLoginRepository - case .google: - googleLoginRepository - case .kakao: - kakaoLoginRepository - case .naver: - naverLoginRepository + switch type { + case .apple: + appleLoginRepository.login(requestLogin: requestLogin) { result in + } + case .google: + break + case .kakao: + break + case .naver: + break } + } func logout( type: LoginType, @@ -55,4 +68,11 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { ) { } + + func withdrawal( + type: LoginType, + completion: @escaping (Result) -> Void + ) { + + } } diff --git a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift index af1261d5..f8a8ca13 100644 --- a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift +++ b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift @@ -164,13 +164,8 @@ final class LoginViewPresenter: NSObject { func login(type: LoginType) { socialLoginUseCase.login( type: type, - requestLogin: { result in - switch result { - case .success(let success): break - - case .failure(let failure): break - - } + requestLogin: { + viewController?.switchIsLoading(with: true) }, completion: { result in switch result { From a48a7eb1ad47d038d65585b22f7099625da81ee4 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Tue, 16 Jul 2024 00:41:00 +0900 Subject: [PATCH 22/37] =?UTF-8?q?[Feat]:=20Social=20Login=20ViewController?= =?UTF-8?q?,=20Presenter=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewController/LoginViewController.swift | 11 +++++++++++ .../ViewPresenter/LoginViewPresenter.swift | 18 +++++++++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift index 5bc4323a..ee7aaa26 100644 --- a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift +++ b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift @@ -204,6 +204,17 @@ extension LoginViewController: LoginViewProtocol { } } + // TODO: 코드 수정 필요 + func pushRegistrationView() { + let viewController = FirstRegistrationViewController() + + let presenter = FirstRegistrationPresenter(viewController: viewController) + + viewController.presenter = presenter + + self.navigationController?.pushViewController(viewController, animated: true) + } + func pushRegistrationWhenAppleLogin(_ userModel: AVIROAppleUserSignUpDTO) { DispatchQueue.main.async { [weak self] in let viewController = FirstRegistrationViewController() diff --git a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift index f8a8ca13..a77bdc84 100644 --- a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift +++ b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift @@ -18,6 +18,7 @@ protocol LoginViewProtocol: NSObject { func pushTabBar() func pushRegistrationWhenAppleLogin(_ userModel: AVIROAppleUserSignUpDTO) + func pushRegistrationView() func afterLogoutAndMakeToastButton() func afterWithdrawalUserShowAlert() @@ -167,12 +168,19 @@ final class LoginViewPresenter: NSObject { requestLogin: { viewController?.switchIsLoading(with: true) }, - completion: { result in + completion: { [weak self] result in switch result { - case .success(let success): - break - case .failure(let failure): - break + case .success(let isMember): + self?.viewController?.switchIsLoading(with: false) + + if isMember { + self?.viewController?.pushTabBar() + } else { + self?.viewController?.pushRegistrationView() + } + case .failure(let error): + self?.viewController?.switchIsLoading(with: false) + self?.viewController?.showErrorAlert(with: "error", title: nil) } } ) From cdff5a703edb98f061e696c1eb2aef8efea0de17 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Tue, 16 Jul 2024 01:10:18 +0900 Subject: [PATCH 23/37] =?UTF-8?q?[Feat]:=20Apple=20Login=20Check=20Member?= =?UTF-8?q?=20AVIRO=20API=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AppleAuthRepository.swift | 33 ++++++++++++------- .../Domain/UseCases/SocialLoginUseCase.swift | 3 +- .../ViewPresenter/LoginViewPresenter.swift | 2 +- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift index 788d34f1..bf76de72 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift @@ -10,6 +10,7 @@ import AuthenticationServices final class AppleAuthRepository: NSObject { private let backgroundQueue: DataTransferDispatchQueue + private var loginCompletion: ((Result) -> Void)? init( backgroundQueue: DataTransferDispatchQueue = DispatchQueue.global(qos: .userInitiated) @@ -24,7 +25,8 @@ extension AppleAuthRepository: SocialLoginRepositoryInterface { completion: @escaping (Result) -> Void ) { requestLogin() - + self.loginCompletion = completion + let request = ASAuthorizationAppleIDProvider().createRequest() request.requestedScopes = [.fullName, .email] @@ -47,20 +49,29 @@ extension AppleAuthRepository: ASAuthorizationControllerDelegate { guard let authorizationCode = appleIDCredential.authorizationCode, let identityToken = appleIDCredential.identityToken else { return } - let code = String(data: authorizationCode, encoding: .utf8)! let token = String(data: identityToken, encoding: .utf8)! - - let fullName = appleIDCredential.fullName?.formatted() ?? "" - let email = appleIDCredential.email ?? "" - - let model = AppleUserLoginModel( + let code = String(data: authorizationCode, encoding: .utf8)! + + let memberCheckDTO = AVIROAppleUserCheckMemberDTO( identityToken: token, - authorizationCode: code, - userName: fullName, - userEmail: email + authorizationCode: code ) - print(model) + AVIROAPI.manager.checkAppleUserWhenLogin(with: memberCheckDTO) { [weak self] result in + switch result { + case .success(let success): + if success.statusCode == 200 { + self?.loginCompletion?(.success(true)) + } else { + self?.loginCompletion?(.success(true)) + } + case .failure(let error): + if let error = error.errorDescription { + self?.loginCompletion?(.success(true)) + + } + } + } } } } diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index e13aefb2..b2fc4cc7 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -51,7 +51,8 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { switch type { case .apple: appleLoginRepository.login(requestLogin: requestLogin) { result in - + print("TestTest") + print(result) } case .google: break diff --git a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift index a77bdc84..ffda286e 100644 --- a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift +++ b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift @@ -178,7 +178,7 @@ final class LoginViewPresenter: NSObject { } else { self?.viewController?.pushRegistrationView() } - case .failure(let error): + case .failure(let error): self?.viewController?.switchIsLoading(with: false) self?.viewController?.showErrorAlert(with: "error", title: nil) } From e75045c5e841d49ee0a6da2a7304259222ca449f Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Mon, 22 Jul 2024 01:26:24 +0900 Subject: [PATCH 24/37] =?UTF-8?q?[Feat]:=20Apple=20/=20Google=20user=20log?= =?UTF-8?q?in=20&=20isMemeber=20Check=20=EA=B8=B0=EB=8A=A5=20=EC=84=A4?= =?UTF-8?q?=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 32 +++++++ AVIRO/App/AppController.swift | 23 ++--- .../AppleAuthRepository.swift | 49 ++++++++--- .../GoogleAuthRepository.swift | 88 ++++++++++++++++--- .../KakaoAuthRepository.swift | 6 +- .../NaverAuthRepository.swift | 7 +- AVIRO/Domain/Entities/Common/TempError.swift | 19 ++++ .../SignIn/SignInFromAppleGoogle.swift | 21 +++++ .../SignIn/SignInFromKakaoNaver.swift | 17 ++++ AVIRO/Domain/Entities/SignIn/SingIn.swift | 8 ++ .../SocialLoginRepositoryInterface.swift | 32 ++++++- .../Domain/UseCases/SocialLoginUseCase.swift | 78 +++++++++++----- .../AVIRO/AVIROPost/User/AVIROUser+DTO.swift | 2 +- .../ViewController/LoginViewController.swift | 8 +- .../ViewPresenter/LoginViewPresenter.swift | 6 +- 15 files changed, 325 insertions(+), 71 deletions(-) create mode 100644 AVIRO/Domain/Entities/Common/TempError.swift create mode 100644 AVIRO/Domain/Entities/SignIn/SignInFromAppleGoogle.swift create mode 100644 AVIRO/Domain/Entities/SignIn/SignInFromKakaoNaver.swift create mode 100644 AVIRO/Domain/Entities/SignIn/SingIn.swift diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 16eed80c..56db0d00 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -178,6 +178,10 @@ C59491D32AB0336100880B4B /* UIView(Animation)+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C59491D22AB0336100880B4B /* UIView(Animation)+Extension.swift */; }; C595ACCD2A84A1A200D35123 /* PlaceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C595ACCC2A84A1A200D35123 /* PlaceView.swift */; }; C595ACD12A84A4EB00D35123 /* PlaceSummaryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C595ACD02A84A4EB00D35123 /* PlaceSummaryView.swift */; }; + C5A169162C4D53970028BCC0 /* SignInFromAppleGoogle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169152C4D53970028BCC0 /* SignInFromAppleGoogle.swift */; }; + C5A169182C4D53A50028BCC0 /* SignInFromKakaoNaver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */; }; + C5A1691A2C4D53CF0028BCC0 /* SingIn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169192C4D53CF0028BCC0 /* SingIn.swift */; }; + C5A1691D2C4D5DD60028BCC0 /* TempError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A1691C2C4D5DD60028BCC0 /* TempError.swift */; }; C5A201B22A98502500A54381 /* TimeUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A201B12A98502500A54381 /* TimeUtility.swift */; }; C5A201B42A986EC300A54381 /* EditPlaceInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A201B32A986EC300A54381 /* EditPlaceInfoViewController.swift */; }; C5A201B72A986EDF00A54381 /* EditMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A201B62A986EDF00A54381 /* EditMenuViewController.swift */; }; @@ -520,6 +524,10 @@ C59491D22AB0336100880B4B /* UIView(Animation)+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView(Animation)+Extension.swift"; sourceTree = ""; }; C595ACCC2A84A1A200D35123 /* PlaceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceView.swift; sourceTree = ""; }; C595ACD02A84A4EB00D35123 /* PlaceSummaryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceSummaryView.swift; sourceTree = ""; }; + C5A169152C4D53970028BCC0 /* SignInFromAppleGoogle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInFromAppleGoogle.swift; sourceTree = ""; }; + C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInFromKakaoNaver.swift; sourceTree = ""; }; + C5A169192C4D53CF0028BCC0 /* SingIn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingIn.swift; sourceTree = ""; }; + C5A1691C2C4D5DD60028BCC0 /* TempError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TempError.swift; sourceTree = ""; }; C5A201B12A98502500A54381 /* TimeUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeUtility.swift; sourceTree = ""; }; C5A201B32A986EC300A54381 /* EditPlaceInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditPlaceInfoViewController.swift; sourceTree = ""; }; C5A201B62A986EDF00A54381 /* EditMenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditMenuViewController.swift; sourceTree = ""; }; @@ -1722,6 +1730,24 @@ path = TutorialCell; sourceTree = ""; }; + C5A169142C4D53520028BCC0 /* SignIn */ = { + isa = PBXGroup; + children = ( + C5A169152C4D53970028BCC0 /* SignInFromAppleGoogle.swift */, + C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */, + C5A169192C4D53CF0028BCC0 /* SingIn.swift */, + ); + path = SignIn; + sourceTree = ""; + }; + C5A1691B2C4D5DCC0028BCC0 /* Common */ = { + isa = PBXGroup; + children = ( + C5A1691C2C4D5DD60028BCC0 /* TempError.swift */, + ); + path = Common; + sourceTree = ""; + }; C5A201B52A986ECA00A54381 /* EditPlaceInfo */ = { isa = PBXGroup; children = ( @@ -1966,6 +1992,8 @@ C5BA9E072BED1CF8004FA06E /* Entities */ = { isa = PBXGroup; children = ( + C5A1691B2C4D5DCC0028BCC0 /* Common */, + C5A169142C4D53520028BCC0 /* SignIn */, C534B14C2C2EABD300C62FDA /* User */, ); path = Entities; @@ -2952,6 +2980,7 @@ C5732C752A41962D00CDC499 /* AVIRORequestAPI.swift in Sources */, C562B6DC2B38704600CE5D4C /* ChallengeViewModel.swift in Sources */, C5C178712C37B30E00B774AE /* NaverAuthRepository.swift in Sources */, + C5A169162C4D53970028BCC0 /* SignInFromAppleGoogle.swift in Sources */, C5C20BAC2AD504D500855BBB /* AmplitudeUtility.swift in Sources */, C513854C2AAB3B52001AB827 /* NickNameChangeblePresenter.swift in Sources */, C5D93DA12A581F5A00629C39 /* FirstRegistrationPresenter.swift in Sources */, @@ -3037,6 +3066,7 @@ C528E4C02A5FF1CB002BD72E /* FinalRegistrationViewController.swift in Sources */, C5FBDA5C2B398264007AC77E /* ChallengeInfoYellowView.swift in Sources */, C5DCBC8F2B91CF46003502BA /* AVIROMyBookmarkList+DTO.swift in Sources */, + C5A1691D2C4D5DD60028BCC0 /* TempError.swift in Sources */, C5D93DA32A58718300629C39 /* NextPageButton.swift in Sources */, C5ED99602C088FAA0077B2F9 /* UserInfoRepositoryInterface.swift in Sources */, C5BA9E0E2BED1D75004FA06E /* AVIROViewModel.swift in Sources */, @@ -3149,6 +3179,7 @@ C50E6F6F2A8F10B500703B9E /* UILabel+Extension.swift in Sources */, C52066352A7F3FAE0038ECCD /* HistoryTableViewCell.swift in Sources */, C5C90EB72AA7078300AB3668 /* EditOperationHoursModel.swift in Sources */, + C5A169182C4D53A50028BCC0 /* SignInFromKakaoNaver.swift in Sources */, C5BA9DCB2BE8AB97004FA06E /* NetworkService.swift in Sources */, C54733D32BE20EF4004E961C /* SearchUtility.swift in Sources */, C528E4BA2A5F9A3E002BD72E /* ThridRegistrationViewController.swift in Sources */, @@ -3176,6 +3207,7 @@ C5351B7A2A1B439000116D50 /* KakaoCoordinateSearchDTO.swift in Sources */, C5ED99372C088D360077B2F9 /* StoreManagementRepository.swift in Sources */, C5C290852A86173F00ED5DCE /* PlaceReviewWriteView.swift in Sources */, + C5A1691A2C4D53CF0028BCC0 /* SingIn.swift in Sources */, C51BBAD52A78D53D00BF5B7C /* AVIROCheckPlace+DTO.swift in Sources */, C5ED996E2C0890CE0077B2F9 /* StoreInfoRepositoryInterface.swift in Sources */, C56857802A7113C600F52715 /* NormalTableViewCell.swift in Sources */, diff --git a/AVIRO/App/AppController.swift b/AVIRO/App/AppController.swift index dfdd85c4..58b0f287 100644 --- a/AVIRO/App/AppController.swift +++ b/AVIRO/App/AppController.swift @@ -16,6 +16,8 @@ final class AppController { private let keychain = KeychainSwift() private let amplitude = AmplitudeUtility() + private let socialLoginUsecase: SocialLoginUseCase + private var window: UIWindow! private var rootViewController: UIViewController? { didSet { @@ -24,7 +26,16 @@ final class AppController { } } - private init() { } + private init() { + let container = DIContainer.shared + + self.socialLoginUsecase = SocialLoginUseCase( + appleLoginRepository: container.resolve(AppleAuthRepository.self)!, + googleLoginRepository: container.resolve(GoogleAuthRepository.self)!, + kakaoLoginRepository: container.resolve(KakaoAuthRepository.self)!, + naverLoginRepository: container.resolve(NaverAuthRepository.self)! + ) + } // MARK: 외부랑 소통할 메서드 func show(in window: UIWindow) { @@ -60,6 +71,7 @@ final class AppController { let userCheck = AVIROAutoLoginWhenAppleUserDTO(refreshToken: userKey) + // TODO: user 정보 불러오기 수정 AVIROAPI.manager.checkAppleUserWhenInitiate(with: userCheck) { [weak self] result in DispatchQueue.main.async { switch result { @@ -96,15 +108,6 @@ final class AppController { // MARK: login View private func setLoginView(type: LoginViewToastType = .none) { - let container = DIContainer.shared - - let socialLoginUsecase = SocialLoginUseCase( - appleLoginRepository: container.resolve(AppleAuthRepository.self)!, - googleLoginRepository: container.resolve(GoogleAuthRepository.self)!, - kakaoLoginRepository: container.resolve(KakaoAuthRepository.self)!, - naverLoginRepository: container.resolve(NaverAuthRepository.self)! - ) - let loginVC = LoginViewController() let presenter = LoginViewPresenter( socialLoginUseCase: socialLoginUsecase, diff --git a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift index bf76de72..744aa493 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift @@ -10,8 +10,8 @@ import AuthenticationServices final class AppleAuthRepository: NSObject { private let backgroundQueue: DataTransferDispatchQueue - private var loginCompletion: ((Result) -> Void)? - + private var loginCompletion: ((SignInFromAppleGoogle) -> Void)? + private var errorCompletion: ((String) -> Void)? init( backgroundQueue: DataTransferDispatchQueue = DispatchQueue.global(qos: .userInitiated) ) { @@ -19,13 +19,16 @@ final class AppleAuthRepository: NSObject { } } -extension AppleAuthRepository: SocialLoginRepositoryInterface { +extension AppleAuthRepository: AppleLoginRepositoryInterface { func login( requestLogin: () -> Void, - completion: @escaping (Result) -> Void + loginCompletion: @escaping (SignInFromAppleGoogle) -> Void, + errorCompletion: @escaping (String) -> Void ) { requestLogin() - self.loginCompletion = completion + + self.loginCompletion = loginCompletion + self.errorCompletion = errorCompletion let request = ASAuthorizationAppleIDProvider().createRequest() request.requestedScopes = [.fullName, .email] @@ -49,26 +52,46 @@ extension AppleAuthRepository: ASAuthorizationControllerDelegate { guard let authorizationCode = appleIDCredential.authorizationCode, let identityToken = appleIDCredential.identityToken else { return } + let fullName = appleIDCredential.fullName?.formatted() ?? " " + let email = appleIDCredential.email ?? " " + let token = String(data: identityToken, encoding: .utf8)! let code = String(data: authorizationCode, encoding: .utf8)! - + let memberCheckDTO = AVIROAppleUserCheckMemberDTO( identityToken: token, authorizationCode: code ) - AVIROAPI.manager.checkAppleUserWhenLogin(with: memberCheckDTO) { [weak self] result in + AVIROAPI.manager.checkAppleUserWhenLogin( + with: memberCheckDTO + ) { [weak self] result in + guard let self = self else { return } switch result { case .success(let success): - if success.statusCode == 200 { - self?.loginCompletion?(.success(true)) + if success.statusCode == 200, + let data = success.data { + let userData = SignInUserDataFromAppleGoogle( + refreshToken: data.refreshToken, + accessToken: data.accessToken, + userId: data.userId, + userName: fullName, + userEmail: email + ) + + let model = SignInFromAppleGoogle( + isMember: data.isMember, + userData: userData + ) + + self.loginCompletion?(model) } else { - self?.loginCompletion?(.success(true)) + guard let errorMessage = success.message else { return } + self.errorCompletion?(errorMessage) } case .failure(let error): - if let error = error.errorDescription { - self?.loginCompletion?(.success(true)) - + if let errorMessage = error.errorDescription { + self.errorCompletion?(errorMessage) } } } diff --git a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift index 4d457324..cb3397a4 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift @@ -12,6 +12,9 @@ import GoogleSignIn final class GoogleAuthRepository { private let clientID: String? + private var loginCompletion: ((SignInFromAppleGoogle) -> Void)? + private var errorCompletion: ((String) -> Void)? + init() { guard let keyURL = Bundle.main.url(forResource: "API", withExtension: "plist"), let dictionary = NSDictionary(contentsOf: keyURL) as? [String: Any] else { @@ -23,26 +26,85 @@ final class GoogleAuthRepository { } } -extension GoogleAuthRepository: SocialLoginRepositoryInterface { +extension GoogleAuthRepository: GoogleLoginRepositoryInterface { func login( requestLogin: () -> Void, - completion: @escaping (Result) -> Void + loginCompletion: @escaping (SignInFromAppleGoogle) -> Void, + errorCompletion: @escaping (String) -> Void ) { + guard let clientID = self.clientID, + let viewController = UIApplication.getMostTopViewController() + else { + errorCompletion("구글 로그인을 사용할 수 없습니다.") + return + } - } - - func login(completion: @escaping (Result) -> Void) { - guard let clientID = self.clientID else { return } - guard let viewController = UIApplication.getMostTopViewController() else { return } + requestLogin() - let singinConfig = GIDConfiguration(clientID: clientID) + self.loginCompletion = loginCompletion + self.errorCompletion = errorCompletion - GIDSignIn.sharedInstance.signIn(withPresenting: viewController) { [weak self] userInfo, error in - print("userInfo: ", userInfo) - print("accessToken: ", userInfo?.user.accessToken) - print("idToken: ", userInfo?.user.idToken) - print("userID: ", userInfo?.user.userID) + GIDSignIn.sharedInstance.signIn( + withPresenting: viewController + ) { [weak self] user, error in + if let error = error { + self?.errorCompletion?(error.localizedDescription) + return + } + + guard let user = user else { + self?.errorCompletion?("구글 사용자 정보를 가져올 수 없습니다.") + return + } + + guard let idToken = user.user.idToken?.tokenString, + let authorizationCode = user.serverAuthCode else { + self?.errorCompletion?("구글 사용자 인증 정보를 가져올 수 없습니다.") + return + } + + + let memberCheckDTO = AVIROAppleUserCheckMemberDTO( + identityToken: idToken, + authorizationCode: authorizationCode + ) + + AVIROAPI.manager.checkAppleUserWhenLogin( + with: memberCheckDTO + ) { [weak self] result in + guard let self = self else { return } + + switch result { + case .success(let success): + if success.statusCode == 200, + let data = success.data { + let userData = SignInUserDataFromAppleGoogle( + refreshToken: data.refreshToken, + accessToken: data.accessToken, + userId: user.user.userID, + userName: user.user.profile?.name, + userEmail: user.user.profile?.email + ) + + let model = SignInFromAppleGoogle( + isMember: data.isMember, + userData: userData + ) + + self.loginCompletion?(model) + } else { + guard let errorMessage = success.message else { return } + + self.errorCompletion?(errorMessage) + } + case .failure(let error): + if let errorMessage = error.errorDescription { + self.errorCompletion?(errorMessage) + } + } + } } + } func logout(completion: @escaping (Result) -> Void) { diff --git a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift index be20c4ef..fe6d211d 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift @@ -22,7 +22,11 @@ final class KakaoAuthRepository { } } -extension KakaoAuthRepository: SocialLoginRepositoryInterface { +extension KakaoAuthRepository: KakaoLoginRepositoryInterface { + func login(requestLogin: () -> Void, loginCompletion: @escaping (SignInFromKakaoNaver) -> Void, errorCompletion: @escaping (String) -> Void) { + + } + func login( requestLogin: () -> Void, completion: @escaping (Result) -> Void diff --git a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift index 0ed9dffd..819a9097 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift @@ -51,14 +51,15 @@ final class NaverAuthRepository: NSObject { } } -extension NaverAuthRepository: SocialLoginRepositoryInterface { +extension NaverAuthRepository: NaverLoginRepositoryInterface { func login( requestLogin: () -> Void, - completion: @escaping (Result) -> Void + loginCompletion: @escaping (SignInFromKakaoNaver) -> Void, + errorCompletion: @escaping (String) -> Void ) { } - + func login(completion: @escaping (Result) -> Void) { instance?.delegate = self instance?.requestThirdPartyLogin() diff --git a/AVIRO/Domain/Entities/Common/TempError.swift b/AVIRO/Domain/Entities/Common/TempError.swift new file mode 100644 index 00000000..ed0e6206 --- /dev/null +++ b/AVIRO/Domain/Entities/Common/TempError.swift @@ -0,0 +1,19 @@ +// +// TempError.swift +// AVIRO +// +// Created by 전성훈 on 7/22/24. +// + +import Foundation + +enum TempError: LocalizedError { + case temp(String) + + var errorDescription: String? { + switch self { + case .temp(let message): + return message + } + } +} diff --git a/AVIRO/Domain/Entities/SignIn/SignInFromAppleGoogle.swift b/AVIRO/Domain/Entities/SignIn/SignInFromAppleGoogle.swift new file mode 100644 index 00000000..ca16c912 --- /dev/null +++ b/AVIRO/Domain/Entities/SignIn/SignInFromAppleGoogle.swift @@ -0,0 +1,21 @@ +// +// SignInFromAppleGoogle.swift +// AVIRO +// +// Created by 전성훈 on 7/21/24. +// + +import Foundation + +struct SignInFromAppleGoogle { + let isMember: Bool + let userData: SignInUserDataFromAppleGoogle +} + +struct SignInUserDataFromAppleGoogle { + let refreshToken: String + let accessToken: String + let userId: String? + let userName: String? + let userEmail: String? +} diff --git a/AVIRO/Domain/Entities/SignIn/SignInFromKakaoNaver.swift b/AVIRO/Domain/Entities/SignIn/SignInFromKakaoNaver.swift new file mode 100644 index 00000000..9d02c742 --- /dev/null +++ b/AVIRO/Domain/Entities/SignIn/SignInFromKakaoNaver.swift @@ -0,0 +1,17 @@ +// +// SignInFromKakaoNaver.swift +// AVIRO +// +// Created by 전성훈 on 7/21/24. +// + +import Foundation + +struct SignInFromKakaoNaver { + let isMember: Bool + let userData: SignInUserDataFromKakaoNaver +} + +struct SignInUserDataFromKakaoNaver { + let userId: String? +} diff --git a/AVIRO/Domain/Entities/SignIn/SingIn.swift b/AVIRO/Domain/Entities/SignIn/SingIn.swift new file mode 100644 index 00000000..bd4c5c16 --- /dev/null +++ b/AVIRO/Domain/Entities/SignIn/SingIn.swift @@ -0,0 +1,8 @@ +// +// Singin.swift +// AVIRO +// +// Created by 전성훈 on 7/21/24. +// + +import Foundation diff --git a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift index 33cf83b4..b4979cdc 100644 --- a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift +++ b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift @@ -7,10 +7,38 @@ import Foundation -protocol SocialLoginRepositoryInterface { +protocol AppleLoginRepositoryInterface { func login( requestLogin: () -> Void, - completion: @escaping (Result) -> Void + loginCompletion: @escaping (SignInFromAppleGoogle) -> Void, + errorCompletion: @escaping (String) -> Void + ) + func logout(completion: @escaping (Result) -> Void) +} + +protocol GoogleLoginRepositoryInterface { + func login( + requestLogin: () -> Void, + loginCompletion: @escaping (SignInFromAppleGoogle) -> Void, + errorCompletion: @escaping (String) -> Void + ) + func logout(completion: @escaping (Result) -> Void) +} + +protocol KakaoLoginRepositoryInterface { + func login( + requestLogin: () -> Void, + loginCompletion: @escaping (SignInFromKakaoNaver) -> Void, + errorCompletion: @escaping (String) -> Void + ) + func logout(completion: @escaping (Result) -> Void) +} + +protocol NaverLoginRepositoryInterface { + func login( + requestLogin: () -> Void, + loginCompletion: @escaping (SignInFromKakaoNaver) -> Void, + errorCompletion: @escaping (String) -> Void ) func logout(completion: @escaping (Result) -> Void) } diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index b2fc4cc7..394e15cf 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -8,32 +8,32 @@ import Foundation protocol SocialLoginUseCaseInterface: AnyObject { - func login( + func checkMember( type: LoginType, requestLogin: () -> Void, - completion: @escaping (Result) -> Void - ) + completion: @escaping (Result) -> Void) func logout( type: LoginType, - completion: @escaping (Result) -> Void - ) + completion: @escaping (Result) -> Void) + func singin( + type: LoginType, + completion: @escaping (Result) -> Void) func withdrawal( type: LoginType, - completion: @escaping (Result) -> Void - ) + completion: @escaping (Result) -> Void) } final class SocialLoginUseCase { - private let appleLoginRepository: SocialLoginRepositoryInterface - private let googleLoginRepository: SocialLoginRepositoryInterface - private let kakaoLoginRepository: SocialLoginRepositoryInterface - private let naverLoginRepository: SocialLoginRepositoryInterface + private let appleLoginRepository: AppleLoginRepositoryInterface + private let googleLoginRepository: GoogleLoginRepositoryInterface + private let kakaoLoginRepository: KakaoLoginRepositoryInterface + private let naverLoginRepository: NaverLoginRepositoryInterface init( - appleLoginRepository: SocialLoginRepositoryInterface, - googleLoginRepository: SocialLoginRepositoryInterface, - kakaoLoginRepository: SocialLoginRepositoryInterface, - naverLoginRepository: SocialLoginRepositoryInterface + appleLoginRepository: AppleLoginRepositoryInterface, + googleLoginRepository: GoogleLoginRepositoryInterface, + kakaoLoginRepository: KakaoLoginRepositoryInterface, + naverLoginRepository: NaverLoginRepositoryInterface ) { self.appleLoginRepository = appleLoginRepository self.googleLoginRepository = googleLoginRepository @@ -42,20 +42,45 @@ final class SocialLoginUseCase { } } +// TODO: String -> Error 번경 후 공통 Error 처리 로직 설계 필요 extension SocialLoginUseCase: SocialLoginUseCaseInterface { - func login( + func checkMember( type: LoginType, requestLogin: () -> Void, completion: @escaping (Result) -> Void ) { switch type { case .apple: - appleLoginRepository.login(requestLogin: requestLogin) { result in - print("TestTest") - print(result) - } + appleLoginRepository.login( + requestLogin: requestLogin, + loginCompletion: { [weak self] result in + if result.isMember { + completion(.success(true)) + } else { + self?.setupUserData() + completion(.success(false)) + } + }, errorCompletion: { result in + let error = TempError.temp(result) + completion(.failure(error)) + } + ) case .google: - break + googleLoginRepository.login( + requestLogin: requestLogin, + loginCompletion: { [weak self] result in + if result.isMember { + completion(.success(true)) + } else { + self?.setupUserData() + completion(.success(false)) + } + }, + errorCompletion: { result in + let error = TempError.temp(result) + completion(.failure(error)) + } + ) case .kakao: break case .naver: @@ -63,6 +88,17 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { } } + private func setupUserData() { + + } + + func singin( + type: LoginType, + completion: @escaping (Result) -> Void + ) { + + } + func logout( type: LoginType, completion: @escaping (Result) -> Void diff --git a/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift b/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift index 05596bd1..567a86fd 100644 --- a/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift +++ b/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift @@ -40,7 +40,7 @@ struct AVIROAppleUserRawData: Decodable { let isMember: Bool let refreshToken: String let accessToken: String - let userId: String + let userId: String? } struct AVIROAppleUserSignUpDTO: Codable { diff --git a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift index ee7aaa26..c73e8690 100644 --- a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift +++ b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift @@ -55,7 +55,7 @@ final class LoginViewController: UIViewController { btn.setButtonStyle(type: .naver) btn.didTappedButton = { [weak self] in // TODO: 함수 위치 변경하기 - self?.presenter.login(type: .naver) + self?.presenter.checkMember(type: .naver) } return btn @@ -66,7 +66,7 @@ final class LoginViewController: UIViewController { btn.setButtonStyle(type: .kakao) btn.didTappedButton = { [weak self] in - self?.presenter.login(type: .kakao) + self?.presenter.checkMember(type: .kakao) } return btn @@ -77,7 +77,7 @@ final class LoginViewController: UIViewController { btn.setButtonStyle(type: .google) btn.didTappedButton = { [weak self] in - self?.presenter.login(type: .google) + self?.presenter.checkMember(type: .google) } return btn @@ -88,7 +88,7 @@ final class LoginViewController: UIViewController { btn.setButtonStyle(type: .apple) btn.didTappedButton = { [weak self] in - self?.presenter.login(type: .apple) + self?.presenter.checkMember(type: .apple) } return btn diff --git a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift index ffda286e..04c3940c 100644 --- a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift +++ b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift @@ -101,7 +101,7 @@ final class LoginViewPresenter: NSObject { let model = AVIROAppleUserSignUpDTO( refreshToken: data.refreshToken, accessToken: data.accessToken, - userId: data.userId, + userId: data.userId ?? "", userName: model.userName, userEmail: model.userEmail, marketingAgree: false @@ -162,8 +162,8 @@ final class LoginViewPresenter: NSObject { } } - func login(type: LoginType) { - socialLoginUseCase.login( + func checkMember(type: LoginType) { + socialLoginUseCase.checkMember( type: type, requestLogin: { viewController?.switchIsLoading(with: true) From dca77455039596ea542ff1362c7c7172a3cc6b25 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Mon, 22 Jul 2024 21:27:52 +0900 Subject: [PATCH 25/37] =?UTF-8?q?[Feat]:=20Kakao=20User=20Check=20Repo=20?= =?UTF-8?q?=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 8 +- .../GoogleAuthRepository.swift | 1 - .../KakaoAuthRepository.swift | 85 +++++++++++++++---- .../NaverAuthRepository.swift | 4 - .../{TempError.swift => CommonError.swift} | 4 +- .../SignIn/SignInFromKakaoNaver.swift | 3 + .../Domain/UseCases/SocialLoginUseCase.swift | 20 ++++- .../APIManager/AVIROManager/AVIROAPI.swift | 24 ++++++ .../AVIROAPIManagerProtocol.swift | 12 ++- .../AVIROManager/AVIROPostAPI.swift | 6 ++ .../AVIRO/AVIROPost/User/AVIROUser+DTO.swift | 15 ++++ 11 files changed, 147 insertions(+), 35 deletions(-) rename AVIRO/Domain/Entities/Common/{TempError.swift => CommonError.swift} (80%) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 56db0d00..5c65c563 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -181,7 +181,7 @@ C5A169162C4D53970028BCC0 /* SignInFromAppleGoogle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169152C4D53970028BCC0 /* SignInFromAppleGoogle.swift */; }; C5A169182C4D53A50028BCC0 /* SignInFromKakaoNaver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */; }; C5A1691A2C4D53CF0028BCC0 /* SingIn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169192C4D53CF0028BCC0 /* SingIn.swift */; }; - C5A1691D2C4D5DD60028BCC0 /* TempError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A1691C2C4D5DD60028BCC0 /* TempError.swift */; }; + C5A1691D2C4D5DD60028BCC0 /* CommonError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A1691C2C4D5DD60028BCC0 /* CommonError.swift */; }; C5A201B22A98502500A54381 /* TimeUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A201B12A98502500A54381 /* TimeUtility.swift */; }; C5A201B42A986EC300A54381 /* EditPlaceInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A201B32A986EC300A54381 /* EditPlaceInfoViewController.swift */; }; C5A201B72A986EDF00A54381 /* EditMenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A201B62A986EDF00A54381 /* EditMenuViewController.swift */; }; @@ -527,7 +527,7 @@ C5A169152C4D53970028BCC0 /* SignInFromAppleGoogle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInFromAppleGoogle.swift; sourceTree = ""; }; C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInFromKakaoNaver.swift; sourceTree = ""; }; C5A169192C4D53CF0028BCC0 /* SingIn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingIn.swift; sourceTree = ""; }; - C5A1691C2C4D5DD60028BCC0 /* TempError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TempError.swift; sourceTree = ""; }; + C5A1691C2C4D5DD60028BCC0 /* CommonError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonError.swift; sourceTree = ""; }; C5A201B12A98502500A54381 /* TimeUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeUtility.swift; sourceTree = ""; }; C5A201B32A986EC300A54381 /* EditPlaceInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditPlaceInfoViewController.swift; sourceTree = ""; }; C5A201B62A986EDF00A54381 /* EditMenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditMenuViewController.swift; sourceTree = ""; }; @@ -1743,7 +1743,7 @@ C5A1691B2C4D5DCC0028BCC0 /* Common */ = { isa = PBXGroup; children = ( - C5A1691C2C4D5DD60028BCC0 /* TempError.swift */, + C5A1691C2C4D5DD60028BCC0 /* CommonError.swift */, ); path = Common; sourceTree = ""; @@ -3066,7 +3066,7 @@ C528E4C02A5FF1CB002BD72E /* FinalRegistrationViewController.swift in Sources */, C5FBDA5C2B398264007AC77E /* ChallengeInfoYellowView.swift in Sources */, C5DCBC8F2B91CF46003502BA /* AVIROMyBookmarkList+DTO.swift in Sources */, - C5A1691D2C4D5DD60028BCC0 /* TempError.swift in Sources */, + C5A1691D2C4D5DD60028BCC0 /* CommonError.swift in Sources */, C5D93DA32A58718300629C39 /* NextPageButton.swift in Sources */, C5ED99602C088FAA0077B2F9 /* UserInfoRepositoryInterface.swift in Sources */, C5BA9E0E2BED1D75004FA06E /* AVIROViewModel.swift in Sources */, diff --git a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift index cb3397a4..f2ae66d9 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift @@ -63,7 +63,6 @@ extension GoogleAuthRepository: GoogleLoginRepositoryInterface { return } - let memberCheckDTO = AVIROAppleUserCheckMemberDTO( identityToken: idToken, authorizationCode: authorizationCode diff --git a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift index fe6d211d..369ac56e 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift @@ -12,6 +12,9 @@ import KakaoSDKAuth import KakaoSDKUser final class KakaoAuthRepository { + private var loginCompletion: ((SignInFromKakaoNaver) -> Void)? + private var errorCompletion: ((String) -> Void)? + init() { guard let keyURL = Bundle.main.url(forResource: "API", withExtension: "plist"), let dictionary = NSDictionary(contentsOf: keyURL) as? [String: Any] else { return } @@ -23,37 +26,35 @@ final class KakaoAuthRepository { } extension KakaoAuthRepository: KakaoLoginRepositoryInterface { - func login(requestLogin: () -> Void, loginCompletion: @escaping (SignInFromKakaoNaver) -> Void, errorCompletion: @escaping (String) -> Void) { - - } - func login( requestLogin: () -> Void, - completion: @escaping (Result) -> Void + loginCompletion: @escaping (SignInFromKakaoNaver) -> Void, + errorCompletion: @escaping (String) -> Void ) { + requestLogin() + + self.loginCompletion = loginCompletion + self.errorCompletion = errorCompletion - } - - func login(completion: @escaping (Result) -> Void) { if UserApi.isKakaoTalkLoginAvailable() { UserApi.shared.loginWithKakaoTalk { [weak self] token, error in if let error = error { - print(error) - } else { - print("token: \(token)") + self?.errorCompletion?(error.localizedDescription) + return + } else { self?.getInfo() } } } } - + func logout(completion: @escaping (Result) -> Void) { UserApi.shared.logout {(error) in if let error = error { print(error) - } - else { + return + } else { print("logout() success.") } } @@ -61,9 +62,59 @@ extension KakaoAuthRepository: KakaoLoginRepositoryInterface { private func getInfo() { UserApi.shared.me { user, error in - if let error = error { print(error) } - let id = user?.id - print(id) + if let error = error { + self.errorCompletion?("카카오 로그인을 사용할 수 없습니다.") + return + } + + guard let id = user?.id else { + self.errorCompletion?("카카오 사용자 인증 정보를 가져올 수 없습니다.") + return + } + + let stringID = String(id) + + let checkMemberDTO = AVIROKakaoUserCheckMemberDTO(userId: stringID) + + AVIROAPI.manager.checkKakaoUserWhenLogin(with: checkMemberDTO) { [weak self] result in + guard let self = self else { return } + + switch result { + case .success(let success): + if success.statusCode == 200 || success.statusCode == 400 { + let userData = SignInUserDataFromKakaoNaver(userId: stringID) + var isMember: Bool + var nickname = "" + var marketingAgree = 0 + + if let data = success.data { + isMember = true + nickname = data.nickname + marketingAgree = data.marketingAgree + } else { + isMember = false + } + + let model = SignInFromKakaoNaver( + isMember: isMember, + userData: userData, + nickname: nickname, + marketingAgree: marketingAgree + ) + } else { + guard let message = success.message else { + self.errorCompletion?("서버와 응답이 되지 않습니다.") + return + } + + self.errorCompletion?(message) + } + case .failure(let error): + if let errorMessage = error.errorDescription { + self.errorCompletion?(errorMessage) + } + } + } } } } diff --git a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift index 819a9097..dd5dbbbf 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift @@ -57,10 +57,6 @@ extension NaverAuthRepository: NaverLoginRepositoryInterface { loginCompletion: @escaping (SignInFromKakaoNaver) -> Void, errorCompletion: @escaping (String) -> Void ) { - - } - - func login(completion: @escaping (Result) -> Void) { instance?.delegate = self instance?.requestThirdPartyLogin() } diff --git a/AVIRO/Domain/Entities/Common/TempError.swift b/AVIRO/Domain/Entities/Common/CommonError.swift similarity index 80% rename from AVIRO/Domain/Entities/Common/TempError.swift rename to AVIRO/Domain/Entities/Common/CommonError.swift index ed0e6206..3b1ecabb 100644 --- a/AVIRO/Domain/Entities/Common/TempError.swift +++ b/AVIRO/Domain/Entities/Common/CommonError.swift @@ -1,5 +1,5 @@ // -// TempError.swift +// CommonError.swift // AVIRO // // Created by 전성훈 on 7/22/24. @@ -7,7 +7,7 @@ import Foundation -enum TempError: LocalizedError { +enum CommonError: LocalizedError { case temp(String) var errorDescription: String? { diff --git a/AVIRO/Domain/Entities/SignIn/SignInFromKakaoNaver.swift b/AVIRO/Domain/Entities/SignIn/SignInFromKakaoNaver.swift index 9d02c742..1cf27c79 100644 --- a/AVIRO/Domain/Entities/SignIn/SignInFromKakaoNaver.swift +++ b/AVIRO/Domain/Entities/SignIn/SignInFromKakaoNaver.swift @@ -10,6 +10,9 @@ import Foundation struct SignInFromKakaoNaver { let isMember: Bool let userData: SignInUserDataFromKakaoNaver + + let nickname: String + let marketingAgree: Int } struct SignInUserDataFromKakaoNaver { diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index 394e15cf..0c3a2cbe 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -61,7 +61,7 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { completion(.success(false)) } }, errorCompletion: { result in - let error = TempError.temp(result) + let error = CommonError.temp(result) completion(.failure(error)) } ) @@ -77,14 +77,26 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { } }, errorCompletion: { result in - let error = TempError.temp(result) + let error = CommonError.temp(result) completion(.failure(error)) } ) case .kakao: - break + kakaoLoginRepository.login( + requestLogin: requestLogin, + loginCompletion: { [weak self] result in + }, + errorCompletion: { result in + } + ) case .naver: - break + naverLoginRepository.login( + requestLogin: requestLogin, + loginCompletion: { [weak self] result in + }, + errorCompletion: { result in + } + ) } } diff --git a/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift b/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift index cd2f3971..cbe676bf 100644 --- a/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift +++ b/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift @@ -795,6 +795,30 @@ final class AVIROAPI: AVIROAPIMangerProtocol { ) } + // MARK: POST AutoLogin / Check User - Kakao & Naver + func checkKakaoUserWhenLogin( + with userId: AVIROKakaoUserCheckMemberDTO, + completionHandler: @escaping (Result) -> Void + ) { + guard let url = postAPI.kakaoUserCheck().url else { + completionHandler(.failure(.urlError)) + return + } + + guard let jsonData = try? JSONEncoder().encode(userId) else { + completionHandler(.failure(.encodingError)) + return + } + + performRequest( + with: url, + httpMethod: .post, + requestBody: jsonData, + headers: postAPI.headers, + completionHandler: completionHandler + ) + } + // MARK: POST AutoLogin - Apple func checkAppleUserWhenInitiate( with user: AVIROAutoLoginWhenAppleUserDTO, diff --git a/AVIRO/Manager/APIManager/AVIROManager/AVIROAPIManagerProtocol.swift b/AVIRO/Manager/APIManager/AVIROManager/AVIROAPIManagerProtocol.swift index c4af8d31..e81cde96 100644 --- a/AVIRO/Manager/APIManager/AVIROManager/AVIROAPIManagerProtocol.swift +++ b/AVIRO/Manager/APIManager/AVIROManager/AVIROAPIManagerProtocol.swift @@ -231,19 +231,25 @@ protocol AVIROAPIMangerProtocol: APIManagerProtocol { - POST Edit Nickname / editNickname */ - // MARK: POST User - Apple + // MARK: POST User - Apple & Google func createAppleUser( with user: AVIROAppleUserSignUpDTO, completionHandler: @escaping (Result) -> Void ) - // MARK: POST Check User - Apple + // MARK: POST Check User - Apple & Google func checkAppleUserWhenLogin( with appleToken: AVIROAppleUserCheckMemberDTO, completionHandler: @escaping (Result) -> Void ) - // MARK: POST AutoLogin - Apple + // MARK: POST User & Check User - Kakao & Naver + func checkKakaoUserWhenLogin( + with userId: AVIROKakaoUserCheckMemberDTO, + completionHandler: @escaping (Result) -> Void + ) + + // MARK: POST AutoLogin - Apple & Google func checkAppleUserWhenInitiate( with user: AVIROAutoLoginWhenAppleUserDTO, completionHandler: @escaping (Result) -> Void diff --git a/AVIRO/Manager/APIManager/AVIROManager/AVIROPostAPI.swift b/AVIRO/Manager/APIManager/AVIROManager/AVIROPostAPI.swift index 17c3ac8e..b254705c 100644 --- a/AVIRO/Manager/APIManager/AVIROManager/AVIROPostAPI.swift +++ b/AVIRO/Manager/APIManager/AVIROManager/AVIROPostAPI.swift @@ -56,6 +56,7 @@ struct AVIROPostAPI { static let appleUserCheckPath = "/2/member" static let appleUserSignUpPath = "/2/member/sign-up" static let appleUserRevokePath = "/2/member/revoke" + static let kakaoUserCheckPath = "/2/member/kakao" static let userNicnameCheckPath = "/2/member/check" static let userNicknameChangeablePath = "/2/member/update/nickname" @@ -134,6 +135,11 @@ struct AVIROPostAPI { return createURLComponents(path: AVIROPostAPI.appleUserCheckPath) } + // MARK: Kakao user check + mutating func kakaoUserCheck() -> URLComponents { + return createURLComponents(path: AVIROPostAPI.kakaoUserCheckPath) + } + // MARK: appleUserSignup mutating func appleUserSignup() -> URLComponents { return createURLComponents(path: AVIROPostAPI.appleUserSignUpPath) diff --git a/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift b/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift index 567a86fd..4826233e 100644 --- a/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift +++ b/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift @@ -43,6 +43,21 @@ struct AVIROAppleUserRawData: Decodable { let userId: String? } +struct AVIROKakaoUserCheckMemberDTO: Encodable { + let userId: String +} + +struct AVIROKakaoUserCheckMemberResultDTO: Decodable { + let statusCode: Int + let data: AVIROKakaoUserRawData? + let message: String? +} + +struct AVIROKakaoUserRawData: Decodable { + let nickname: String + let marketingAgree: Int +} + struct AVIROAppleUserSignUpDTO: Codable { let refreshToken: String let accessToken: String From 6ae344713cf1875de232325a86f4278dfa0cd1df Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Tue, 23 Jul 2024 00:51:49 +0900 Subject: [PATCH 26/37] =?UTF-8?q?[Feat]:=20User=20Check=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 8 +- .../AppleAuthRepository.swift | 6 +- .../GoogleAuthRepository.swift | 64 ++++++------- .../KakaoAuthRepository.swift | 9 +- .../NaverAuthRepository.swift | 92 ++++++++++++++----- ...ppleGoogle.swift => SignInFromApple.swift} | 2 +- .../SocialLoginRepositoryInterface.swift | 4 +- .../Domain/UseCases/SocialLoginUseCase.swift | 18 ++++ .../APIManager/AVIROManager/AVIROAPI.swift | 16 ++-- .../AVIROManager/AVIROPostAPI.swift | 6 -- .../AVIROManager/AVIRORequestAPI.swift | 16 ++++ .../ViewPresenter/LoginViewPresenter.swift | 28 +++--- 12 files changed, 174 insertions(+), 95 deletions(-) rename AVIRO/Domain/Entities/SignIn/{SignInFromAppleGoogle.swift => SignInFromApple.swift} (92%) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 5c65c563..90601984 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -178,7 +178,7 @@ C59491D32AB0336100880B4B /* UIView(Animation)+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C59491D22AB0336100880B4B /* UIView(Animation)+Extension.swift */; }; C595ACCD2A84A1A200D35123 /* PlaceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C595ACCC2A84A1A200D35123 /* PlaceView.swift */; }; C595ACD12A84A4EB00D35123 /* PlaceSummaryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C595ACD02A84A4EB00D35123 /* PlaceSummaryView.swift */; }; - C5A169162C4D53970028BCC0 /* SignInFromAppleGoogle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169152C4D53970028BCC0 /* SignInFromAppleGoogle.swift */; }; + C5A169162C4D53970028BCC0 /* SignInFromApple.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169152C4D53970028BCC0 /* SignInFromApple.swift */; }; C5A169182C4D53A50028BCC0 /* SignInFromKakaoNaver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */; }; C5A1691A2C4D53CF0028BCC0 /* SingIn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169192C4D53CF0028BCC0 /* SingIn.swift */; }; C5A1691D2C4D5DD60028BCC0 /* CommonError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A1691C2C4D5DD60028BCC0 /* CommonError.swift */; }; @@ -524,7 +524,7 @@ C59491D22AB0336100880B4B /* UIView(Animation)+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIView(Animation)+Extension.swift"; sourceTree = ""; }; C595ACCC2A84A1A200D35123 /* PlaceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceView.swift; sourceTree = ""; }; C595ACD02A84A4EB00D35123 /* PlaceSummaryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceSummaryView.swift; sourceTree = ""; }; - C5A169152C4D53970028BCC0 /* SignInFromAppleGoogle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInFromAppleGoogle.swift; sourceTree = ""; }; + C5A169152C4D53970028BCC0 /* SignInFromApple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInFromApple.swift; sourceTree = ""; }; C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInFromKakaoNaver.swift; sourceTree = ""; }; C5A169192C4D53CF0028BCC0 /* SingIn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingIn.swift; sourceTree = ""; }; C5A1691C2C4D5DD60028BCC0 /* CommonError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonError.swift; sourceTree = ""; }; @@ -1733,7 +1733,7 @@ C5A169142C4D53520028BCC0 /* SignIn */ = { isa = PBXGroup; children = ( - C5A169152C4D53970028BCC0 /* SignInFromAppleGoogle.swift */, + C5A169152C4D53970028BCC0 /* SignInFromApple.swift */, C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */, C5A169192C4D53CF0028BCC0 /* SingIn.swift */, ); @@ -2980,7 +2980,7 @@ C5732C752A41962D00CDC499 /* AVIRORequestAPI.swift in Sources */, C562B6DC2B38704600CE5D4C /* ChallengeViewModel.swift in Sources */, C5C178712C37B30E00B774AE /* NaverAuthRepository.swift in Sources */, - C5A169162C4D53970028BCC0 /* SignInFromAppleGoogle.swift in Sources */, + C5A169162C4D53970028BCC0 /* SignInFromApple.swift in Sources */, C5C20BAC2AD504D500855BBB /* AmplitudeUtility.swift in Sources */, C513854C2AAB3B52001AB827 /* NickNameChangeblePresenter.swift in Sources */, C5D93DA12A581F5A00629C39 /* FirstRegistrationPresenter.swift in Sources */, diff --git a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift index 744aa493..aea9cef1 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/AppleAuthRepository.swift @@ -10,7 +10,7 @@ import AuthenticationServices final class AppleAuthRepository: NSObject { private let backgroundQueue: DataTransferDispatchQueue - private var loginCompletion: ((SignInFromAppleGoogle) -> Void)? + private var loginCompletion: ((SignInFromApple) -> Void)? private var errorCompletion: ((String) -> Void)? init( backgroundQueue: DataTransferDispatchQueue = DispatchQueue.global(qos: .userInitiated) @@ -22,7 +22,7 @@ final class AppleAuthRepository: NSObject { extension AppleAuthRepository: AppleLoginRepositoryInterface { func login( requestLogin: () -> Void, - loginCompletion: @escaping (SignInFromAppleGoogle) -> Void, + loginCompletion: @escaping (SignInFromApple) -> Void, errorCompletion: @escaping (String) -> Void ) { requestLogin() @@ -79,7 +79,7 @@ extension AppleAuthRepository: ASAuthorizationControllerDelegate { userEmail: email ) - let model = SignInFromAppleGoogle( + let model = SignInFromApple( isMember: data.isMember, userData: userData ) diff --git a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift index f2ae66d9..91415705 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/GoogleAuthRepository.swift @@ -12,7 +12,7 @@ import GoogleSignIn final class GoogleAuthRepository { private let clientID: String? - private var loginCompletion: ((SignInFromAppleGoogle) -> Void)? + private var loginCompletion: ((SignInFromKakaoNaver) -> Void)? private var errorCompletion: ((String) -> Void)? init() { @@ -29,7 +29,7 @@ final class GoogleAuthRepository { extension GoogleAuthRepository: GoogleLoginRepositoryInterface { func login( requestLogin: () -> Void, - loginCompletion: @escaping (SignInFromAppleGoogle) -> Void, + loginCompletion: @escaping (SignInFromKakaoNaver) -> Void, errorCompletion: @escaping (String) -> Void ) { guard let clientID = self.clientID, @@ -46,55 +46,57 @@ extension GoogleAuthRepository: GoogleLoginRepositoryInterface { GIDSignIn.sharedInstance.signIn( withPresenting: viewController - ) { [weak self] user, error in + ) { [weak self] signInResult, error in if let error = error { self?.errorCompletion?(error.localizedDescription) return } - guard let user = user else { + guard let user = signInResult, + let userID = user.user.userID + else { self?.errorCompletion?("구글 사용자 정보를 가져올 수 없습니다.") return } - guard let idToken = user.user.idToken?.tokenString, - let authorizationCode = user.serverAuthCode else { - self?.errorCompletion?("구글 사용자 인증 정보를 가져올 수 없습니다.") - return - } + let checkMemberDTO = AVIROKakaoUserCheckMemberDTO(userId: userID) - let memberCheckDTO = AVIROAppleUserCheckMemberDTO( - identityToken: idToken, - authorizationCode: authorizationCode - ) - - AVIROAPI.manager.checkAppleUserWhenLogin( - with: memberCheckDTO - ) { [weak self] result in + AVIROAPI.manager.checkKakaoUserWhenLogin(with: checkMemberDTO) { [weak self] result in guard let self = self else { return } switch result { case .success(let success): - if success.statusCode == 200, - let data = success.data { - let userData = SignInUserDataFromAppleGoogle( - refreshToken: data.refreshToken, - accessToken: data.accessToken, - userId: user.user.userID, - userName: user.user.profile?.name, - userEmail: user.user.profile?.email - ) + if success.statusCode == 200 || success.statusCode == 400 { + let userData = SignInUserDataFromKakaoNaver(userId: userID) + var isMember: Bool + var nickname = "" + var marketingAgree = 0 - let model = SignInFromAppleGoogle( - isMember: data.isMember, - userData: userData + if let data = success.data { + isMember = true + nickname = data.nickname + marketingAgree = data.marketingAgree + } else { + isMember = false + } + + let model = SignInFromKakaoNaver( + isMember: isMember, + userData: userData, + nickname: nickname, + marketingAgree: marketingAgree ) self.loginCompletion?(model) + + return } else { - guard let errorMessage = success.message else { return } + guard let message = success.message else { + self.errorCompletion?("서버와 응답이 되지 않습니다.") + return + } - self.errorCompletion?(errorMessage) + self.errorCompletion?(message) } case .failure(let error): if let errorMessage = error.errorDescription { diff --git a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift index 369ac56e..4eb3eb5c 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/KakaoAuthRepository.swift @@ -37,10 +37,9 @@ extension KakaoAuthRepository: KakaoLoginRepositoryInterface { self.errorCompletion = errorCompletion if UserApi.isKakaoTalkLoginAvailable() { - UserApi.shared.loginWithKakaoTalk { [weak self] token, error in + UserApi.shared.loginWithKakaoTalk { [weak self] _, error in if let error = error { self?.errorCompletion?(error.localizedDescription) - return } else { self?.getInfo() @@ -101,6 +100,10 @@ extension KakaoAuthRepository: KakaoLoginRepositoryInterface { nickname: nickname, marketingAgree: marketingAgree ) + + self.loginCompletion?(model) + + return } else { guard let message = success.message else { self.errorCompletion?("서버와 응답이 되지 않습니다.") @@ -109,7 +112,7 @@ extension KakaoAuthRepository: KakaoLoginRepositoryInterface { self.errorCompletion?(message) } - case .failure(let error): + case .failure(let error): if let errorMessage = error.errorDescription { self.errorCompletion?(errorMessage) } diff --git a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift index dd5dbbbf..4af0058e 100644 --- a/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift +++ b/AVIRO/Data/Repositories/AuthRepositories/NaverAuthRepository.swift @@ -10,14 +10,16 @@ import Foundation import NaverThirdPartyLogin final class NaverAuthRepository: NSObject { -// private let aviroDataTransferService: DataTransferService private let naverDataTransferService: DataTransferService private let backgroundQueue: DataTransferDispatchQueue - + private let instance = NaverThirdPartyLoginConnection.getSharedInstance() - + + private var loginCompletion: ((SignInFromKakaoNaver) -> Void)? + private var errorCompletion: ((String) -> Void)? + init( -// dataTransferService: DataTransferService, + // dataTransferService: DataTransferService, backgroundQueue: DataTransferDispatchQueue = DispatchQueue.global(qos: .userInitiated) ) { self.backgroundQueue = backgroundQueue @@ -26,7 +28,6 @@ final class NaverAuthRepository: NSObject { let url = URL(string: urlStr)! let naverAPIConfig = APIDataNetworkConfig(baseURL: url) -// self.aviroDataTransferService = dataTransferService self.naverDataTransferService = DataTransferService( networkService: NetworkService(config: naverAPIConfig) ) @@ -38,7 +39,7 @@ final class NaverAuthRepository: NSObject { let consumerSecret = (dictionary["Naver_Client_Secret"] as? String)! // 네이버 앱에서 인증 -// instance?.isNaverAppOauthEnable = true + // instance?.isNaverAppOauthEnable = true // 사파리에서 인증 instance?.isInAppOauthEnable = true @@ -59,6 +60,9 @@ extension NaverAuthRepository: NaverLoginRepositoryInterface { ) { instance?.delegate = self instance?.requestThirdPartyLogin() + + self.loginCompletion = loginCompletion + self.errorCompletion = errorCompletion } func logout(completion: @escaping (Result) -> Void) { @@ -71,60 +75,98 @@ extension NaverAuthRepository: NaverLoginRepositoryInterface { if !isValidAccessToken { return } guard let tokenType = instance?.tokenType, - let accessType = instance?.accessToken, - let refreshToke = instance?.refreshToken + let accessType = instance?.accessToken else { return } let authorization = "\(tokenType) \(accessType)" - + let endpoint = EndPoint( path: "v1/nid/me", method: .get, headerParameters: ["Authorization": authorization] ) - let req = naverDataTransferService.request( + _ = naverDataTransferService.request( with: endpoint, - on: backgroundQueue) { result in + on: backgroundQueue) { [weak self] result in + guard let self = self else { return } + switch result { case .success(let userInfo): - let contentText = """ - userId : \(userInfo.id) - """ + let checkMemberDTO = AVIROKakaoUserCheckMemberDTO(userId: userInfo.id) - print(contentText) + AVIROAPI.manager.checkKakaoUserWhenLogin( + with: checkMemberDTO) { result in + switch result { + case .success(let success): + if success.statusCode == 200 || success.statusCode == 400 { + let userData = SignInUserDataFromKakaoNaver(userId: userInfo.id) + var isMember: Bool + var nickname = "" + var marketingAgree = 0 + + if let data = success.data { + isMember = true + nickname = data.nickname + marketingAgree = data.marketingAgree + } else { + isMember = false + } + + let model = SignInFromKakaoNaver( + isMember: isMember, + userData: userData, + nickname: nickname, + marketingAgree: marketingAgree + ) + + self.loginCompletion?(model) + + return + } else { + guard let message = success.message else { + self.errorCompletion?("서버와 응답이 되지 않습니다.") + return + } + + self.errorCompletion?(message) + } + case .failure(let error): + if let errorMessage = error.errorDescription { + self.errorCompletion?(errorMessage) + } + } + } case .failure(let error): - print("Error \(error)") + self.errorCompletion?(error.localizedDescription) + return } } - } } extension NaverAuthRepository: NaverThirdPartyLoginConnectionDelegate { func oauth20ConnectionDidFinishRequestACTokenWithAuthCode() { - print("Success Login") getInfo() } func oauth20ConnectionDidFinishRequestACTokenWithRefreshToken() { - print("TestTest") - instance?.accessToken + getInfo() } func oauth20ConnectionDidFinishDeleteToken() { - print("Log out") } - func oauth20Connection(_ oauthConnection: NaverThirdPartyLoginConnection!, didFailWithError error: (any Error)!) { - print("error") - } + func oauth20Connection( + _ oauthConnection: NaverThirdPartyLoginConnection!, + didFailWithError error: Error) { + + } } struct NaverUserInfoResponseDTO: Decodable { let id: String -// let name: String private enum RootKeys: String, CodingKey { case response diff --git a/AVIRO/Domain/Entities/SignIn/SignInFromAppleGoogle.swift b/AVIRO/Domain/Entities/SignIn/SignInFromApple.swift similarity index 92% rename from AVIRO/Domain/Entities/SignIn/SignInFromAppleGoogle.swift rename to AVIRO/Domain/Entities/SignIn/SignInFromApple.swift index ca16c912..3b7aa2ae 100644 --- a/AVIRO/Domain/Entities/SignIn/SignInFromAppleGoogle.swift +++ b/AVIRO/Domain/Entities/SignIn/SignInFromApple.swift @@ -7,7 +7,7 @@ import Foundation -struct SignInFromAppleGoogle { +struct SignInFromApple { let isMember: Bool let userData: SignInUserDataFromAppleGoogle } diff --git a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift index b4979cdc..d4f42822 100644 --- a/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift +++ b/AVIRO/Domain/RepositoryInterfaces/SocialLoginRepositoryInterfaces/SocialLoginRepositoryInterface.swift @@ -10,7 +10,7 @@ import Foundation protocol AppleLoginRepositoryInterface { func login( requestLogin: () -> Void, - loginCompletion: @escaping (SignInFromAppleGoogle) -> Void, + loginCompletion: @escaping (SignInFromApple) -> Void, errorCompletion: @escaping (String) -> Void ) func logout(completion: @escaping (Result) -> Void) @@ -19,7 +19,7 @@ protocol AppleLoginRepositoryInterface { protocol GoogleLoginRepositoryInterface { func login( requestLogin: () -> Void, - loginCompletion: @escaping (SignInFromAppleGoogle) -> Void, + loginCompletion: @escaping (SignInFromKakaoNaver) -> Void, errorCompletion: @escaping (String) -> Void ) func logout(completion: @escaping (Result) -> Void) diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index 0c3a2cbe..cee8b39f 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -85,16 +85,34 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { kakaoLoginRepository.login( requestLogin: requestLogin, loginCompletion: { [weak self] result in + if result.isMember { + completion(.success(true)) + } else { + self?.setupUserData() + completion(.success(false)) + } }, errorCompletion: { result in + let error = CommonError.temp(result) + completion(.failure(error)) } ) case .naver: naverLoginRepository.login( requestLogin: requestLogin, loginCompletion: { [weak self] result in + if result.isMember { + print("testtoto") + completion(.success(true)) + } else { + self?.setupUserData() + print("test") + completion(.success(false)) + } }, errorCompletion: { result in + let error = CommonError.temp(result) + completion(.failure(error)) } ) } diff --git a/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift b/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift index cbe676bf..c448239e 100644 --- a/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift +++ b/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift @@ -32,12 +32,15 @@ final class AVIROAPI: AVIROAPIMangerProtocol { onRequest.insert(url) - var request = URLRequest(url: url) request.httpMethod = httpMethod.rawValue request.httpBody = requestBody + print("----------") + print(request) + print("----------") + if let headers = headers { for (key, value) in headers { request.addValue(value, forHTTPHeaderField: key) @@ -795,26 +798,23 @@ final class AVIROAPI: AVIROAPIMangerProtocol { ) } - // MARK: POST AutoLogin / Check User - Kakao & Naver + // MARK: GET AutoLogin / Check User - Kakao & Naver func checkKakaoUserWhenLogin( with userId: AVIROKakaoUserCheckMemberDTO, completionHandler: @escaping (Result) -> Void ) { - guard let url = postAPI.kakaoUserCheck().url else { + guard let url = requestAPI.kakaoUserCheck(userId: userId.userId).url else { completionHandler(.failure(.urlError)) return } - + guard let jsonData = try? JSONEncoder().encode(userId) else { completionHandler(.failure(.encodingError)) return } - + performRequest( with: url, - httpMethod: .post, - requestBody: jsonData, - headers: postAPI.headers, completionHandler: completionHandler ) } diff --git a/AVIRO/Manager/APIManager/AVIROManager/AVIROPostAPI.swift b/AVIRO/Manager/APIManager/AVIROManager/AVIROPostAPI.swift index b254705c..17c3ac8e 100644 --- a/AVIRO/Manager/APIManager/AVIROManager/AVIROPostAPI.swift +++ b/AVIRO/Manager/APIManager/AVIROManager/AVIROPostAPI.swift @@ -56,7 +56,6 @@ struct AVIROPostAPI { static let appleUserCheckPath = "/2/member" static let appleUserSignUpPath = "/2/member/sign-up" static let appleUserRevokePath = "/2/member/revoke" - static let kakaoUserCheckPath = "/2/member/kakao" static let userNicnameCheckPath = "/2/member/check" static let userNicknameChangeablePath = "/2/member/update/nickname" @@ -135,11 +134,6 @@ struct AVIROPostAPI { return createURLComponents(path: AVIROPostAPI.appleUserCheckPath) } - // MARK: Kakao user check - mutating func kakaoUserCheck() -> URLComponents { - return createURLComponents(path: AVIROPostAPI.kakaoUserCheckPath) - } - // MARK: appleUserSignup mutating func appleUserSignup() -> URLComponents { return createURLComponents(path: AVIROPostAPI.appleUserSignUpPath) diff --git a/AVIRO/Manager/APIManager/AVIROManager/AVIRORequestAPI.swift b/AVIRO/Manager/APIManager/AVIROManager/AVIRORequestAPI.swift index 7b925ede..71b392f8 100644 --- a/AVIRO/Manager/APIManager/AVIROManager/AVIRORequestAPI.swift +++ b/AVIRO/Manager/APIManager/AVIROManager/AVIRORequestAPI.swift @@ -56,6 +56,8 @@ struct AVIRORequestAPI { static let wellcomeImagesPath = "/2/map/load/popup" + static let kakaoUserCheckPath = "/3/member/kakao" + // MARK: Key static let userId = "userId" @@ -305,6 +307,20 @@ struct AVIRORequestAPI { mutating func getWellcomImagesURL() -> URLComponents { return createURLComponents(path: AVIRORequestAPI.wellcomeImagesPath) } + + // MARK: Kakao user check + mutating func kakaoUserCheck(userId: String) -> URLComponents { + let queryItems = [ + URLQueryItem( + name: AVIRORequestAPI.userId, + value: userId) + ] + + return createURLComponents( + path: AVIRORequestAPI.kakaoUserCheckPath, + queryItems: queryItems + ) + } } extension AVIRORequestAPI { diff --git a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift index 04c3940c..84e9f924 100644 --- a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift +++ b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift @@ -166,21 +166,25 @@ final class LoginViewPresenter: NSObject { socialLoginUseCase.checkMember( type: type, requestLogin: { - viewController?.switchIsLoading(with: true) + DispatchQueue.main.async { [weak self] in + self?.viewController?.switchIsLoading(with: true) + } }, completion: { [weak self] result in - switch result { - case .success(let isMember): - self?.viewController?.switchIsLoading(with: false) - - if isMember { - self?.viewController?.pushTabBar() - } else { - self?.viewController?.pushRegistrationView() + DispatchQueue.main.async { + switch result { + case .success(let isMember): + self?.viewController?.switchIsLoading(with: false) + + if isMember { + self?.viewController?.pushTabBar() + } else { + self?.viewController?.pushRegistrationView() + } + case .failure(let error): + self?.viewController?.switchIsLoading(with: false) + self?.viewController?.showErrorAlert(with: error.localizedDescription, title: nil) } - case .failure(let error): - self?.viewController?.switchIsLoading(with: false) - self?.viewController?.showErrorAlert(with: "error", title: nil) } } ) From da2b4f4501b3b041a8e98bd69bf176e4f0cf5917 Mon Sep 17 00:00:00 2001 From: seonghun jeon Date: Tue, 23 Jul 2024 14:05:36 +0900 Subject: [PATCH 27/37] =?UTF-8?q?[Feat]:=20App=20Controller=20=EC=9E=90?= =?UTF-8?q?=EB=8F=99=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO/App/AppController.swift | 102 +++++++++++++++++++++++++++-- AVIRO/Custom/Constants/Enum+.swift | 13 ++++ 2 files changed, 110 insertions(+), 5 deletions(-) diff --git a/AVIRO/App/AppController.swift b/AVIRO/App/AppController.swift index 58b0f287..7f241b5d 100644 --- a/AVIRO/App/AppController.swift +++ b/AVIRO/App/AppController.swift @@ -43,14 +43,96 @@ final class AppController { window.backgroundColor = .gray7 // setTabBarView() - checkState() + checkLoginType() } - func setupLoginViewAfterLogout(in window: UIWindow, with type: LoginViewToastType) { - self.window = window - window.backgroundColor = .gray7 + private func checkLoginType() { + // 최초 튜토리얼 화면 안 봤을 때 + guard UserDefaults.standard.bool(forKey: UDKey.tutorial.rawValue) else { + setTutorialView() + return + } + + // login type 업데이트 전 자동로그인 적용을 위해 사전 작업 + if let loginType = UserDefaults.standard.string(forKey: UDKey.loginType.rawValue) { + switch loginType { + case "apple": + checkMemberFromApple() + case "none": + setLoginView() + default: + checkMemberFromOthers() + } + } else { + if let userKey = keychain.get(KeychainKey.appleRefreshToken.rawValue) { + UserDefaults.standard.set( + LoginTypeKey.apple.rawValue, + forKey: UDKey.loginType.rawValue + ) + + keychain.set( + userKey, + forKey: KeychainKey.refreshToken.rawValue + ) + + keychain.delete(KeychainKey.appleRefreshToken.rawValue) + } else { + UserDefaults.standard.set( + LoginTypeKey.none.rawValue, + forKey: UDKey.loginType.rawValue + ) + } + } + + } + + private func checkMemberFromApple() { + keychain.delete(KeychainKey.userID.rawValue) + + guard let refreshToken = keychain.get(KeychainKey.refreshToken.rawValue) else { + setLoginView() + return + } + + let userCheck = AVIROAutoLoginWhenAppleUserDTO(refreshToken: refreshToken) + + AVIROAPI.manager.checkAppleUserWhenInitiate(with: userCheck) { [weak self] result in + DispatchQueue.main.async { + switch result { + case .success(let model): + if model.statusCode == 200 { + if let data = model.data { + MyData.my.whenLogin( + userId: data.userId, + userName: data.userName, + userEmail: data.userEmail, + userNickname: data.nickname, + marketingAgree: data.marketingAgree + ) + + self?.setTabBarView() + } + } else { + self?.keychain.delete(KeychainKey.refreshToken.rawValue) + self?.setLoginView() + } + case .failure(_): + self?.keychain.delete(KeychainKey.refreshToken.rawValue) + self?.setLoginView() + } + } + } + } + + private func checkMemberFromOthers() { + keychain.delete(KeychainKey.refreshToken.rawValue) + + guard let userID = keychain.get(KeychainKey.userID.rawValue) else { + setLoginView() + return + } + - setLoginView(type: type) } // MARK: 불러올 view 확인 메서드 @@ -142,4 +224,14 @@ final class AppController { rootViewController = tabBarVC } + + func setupLoginViewAfterLogout( + in window: UIWindow, + with type: LoginViewToastType + ) { + self.window = window + window.backgroundColor = .gray7 + + setLoginView(type: type) + } } diff --git a/AVIRO/Custom/Constants/Enum+.swift b/AVIRO/Custom/Constants/Enum+.swift index d4c4326d..3adb4980 100644 --- a/AVIRO/Custom/Constants/Enum+.swift +++ b/AVIRO/Custom/Constants/Enum+.swift @@ -21,6 +21,16 @@ enum UDKey: String { case tutorialChallenge case hideUntil case timeForUpdate + + case loginType +} + +enum LoginTypeKey: String { + case none + case apple + case google + case kakao + case naver } // MARK: NotificationCenter Name @@ -31,6 +41,9 @@ enum NotiName: String { // MARK: Keychain enum KeychainKey: String { case appleRefreshToken + + case refreshToken + case userID } // MARK: TableViewCell Identifier From b60f53f6074fa8daca45a14503d85cfe2029ef70 Mon Sep 17 00:00:00 2001 From: seonghun jeon Date: Tue, 23 Jul 2024 16:22:48 +0900 Subject: [PATCH 28/37] =?UTF-8?q?[Feat]:=20App=20Controller=20kakao=20auto?= =?UTF-8?q?=20login=20=EB=B0=A9=EC=8B=9D=20=EC=84=A4=EA=B3=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO/App/AppController.swift | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/AVIRO/App/AppController.swift b/AVIRO/App/AppController.swift index 7f241b5d..1df6b2a4 100644 --- a/AVIRO/App/AppController.swift +++ b/AVIRO/App/AppController.swift @@ -132,6 +132,34 @@ final class AppController { return } + let userCheck = AVIROKakaoUserCheckMemberDTO(userId: userID) + + AVIROAPI.manager.checkKakaoUserWhenLogin(with: userCheck) { [weak self] result in + DispatchQueue.main.async { + switch result { + case .success(let model): + if model.statusCode == 200 { + if let data = model.data { + MyData.my.whenLogin( + userId: userID, + userName: "", + userEmail: "", + userNickname: data.nickname, + marketingAgree: data.marketingAgree + ) + + self?.setTabBarView() + } + } else { + self?.keychain.delete(KeychainKey.userID.rawValue) + self?.setLoginView() + } + case .failure(_): + self?.keychain.delete(KeychainKey.userID.rawValue) + self?.setLoginView() + } + } + } } From fcf786e16e0b52d0e1b828ade95f974b1f856c17 Mon Sep 17 00:00:00 2001 From: seonghun jeon Date: Fri, 26 Jul 2024 19:05:25 +0900 Subject: [PATCH 29/37] =?UTF-8?q?[Feat]:=20Sign=20In=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 8 +- AVIRO/App/AppController.swift | 7 +- AVIRO/Domain/Entities/SignIn/SingIn.swift | 8 - AVIRO/Domain/Entities/SignIn/SingInInfo.swift | 21 ++ AVIRO/Domain/Entities/User/LoginInfo.swift | 2 +- .../Domain/UseCases/SocialLoginUseCase.swift | 60 +++++- .../AVIRO/AVIROPost/User/AVIROUser+DTO.swift | 19 +- .../FirstRegistrationViewController.swift | 13 +- .../SecondRegistrationViewController.swift | 13 +- .../ThridRegistrationViewController.swift | 2 +- .../FirstRegistrationPresenter.swift | 29 ++- .../SecondRegistrationPresenter.swift | 26 +-- .../ThridRegistrationPresenter.swift | 37 +++- .../ViewController/LoginViewController.swift | 38 ++-- .../ViewPresenter/LoginViewPresenter.swift | 185 +++++++++--------- 15 files changed, 291 insertions(+), 177 deletions(-) delete mode 100644 AVIRO/Domain/Entities/SignIn/SingIn.swift create mode 100644 AVIRO/Domain/Entities/SignIn/SingInInfo.swift diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 90601984..02b611bf 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -180,7 +180,7 @@ C595ACD12A84A4EB00D35123 /* PlaceSummaryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C595ACD02A84A4EB00D35123 /* PlaceSummaryView.swift */; }; C5A169162C4D53970028BCC0 /* SignInFromApple.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169152C4D53970028BCC0 /* SignInFromApple.swift */; }; C5A169182C4D53A50028BCC0 /* SignInFromKakaoNaver.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */; }; - C5A1691A2C4D53CF0028BCC0 /* SingIn.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169192C4D53CF0028BCC0 /* SingIn.swift */; }; + C5A1691A2C4D53CF0028BCC0 /* SingInInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A169192C4D53CF0028BCC0 /* SingInInfo.swift */; }; C5A1691D2C4D5DD60028BCC0 /* CommonError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A1691C2C4D5DD60028BCC0 /* CommonError.swift */; }; C5A201B22A98502500A54381 /* TimeUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A201B12A98502500A54381 /* TimeUtility.swift */; }; C5A201B42A986EC300A54381 /* EditPlaceInfoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A201B32A986EC300A54381 /* EditPlaceInfoViewController.swift */; }; @@ -526,7 +526,7 @@ C595ACD02A84A4EB00D35123 /* PlaceSummaryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceSummaryView.swift; sourceTree = ""; }; C5A169152C4D53970028BCC0 /* SignInFromApple.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInFromApple.swift; sourceTree = ""; }; C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInFromKakaoNaver.swift; sourceTree = ""; }; - C5A169192C4D53CF0028BCC0 /* SingIn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingIn.swift; sourceTree = ""; }; + C5A169192C4D53CF0028BCC0 /* SingInInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SingInInfo.swift; sourceTree = ""; }; C5A1691C2C4D5DD60028BCC0 /* CommonError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonError.swift; sourceTree = ""; }; C5A201B12A98502500A54381 /* TimeUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeUtility.swift; sourceTree = ""; }; C5A201B32A986EC300A54381 /* EditPlaceInfoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditPlaceInfoViewController.swift; sourceTree = ""; }; @@ -1735,7 +1735,7 @@ children = ( C5A169152C4D53970028BCC0 /* SignInFromApple.swift */, C5A169172C4D53A50028BCC0 /* SignInFromKakaoNaver.swift */, - C5A169192C4D53CF0028BCC0 /* SingIn.swift */, + C5A169192C4D53CF0028BCC0 /* SingInInfo.swift */, ); path = SignIn; sourceTree = ""; @@ -3207,7 +3207,7 @@ C5351B7A2A1B439000116D50 /* KakaoCoordinateSearchDTO.swift in Sources */, C5ED99372C088D360077B2F9 /* StoreManagementRepository.swift in Sources */, C5C290852A86173F00ED5DCE /* PlaceReviewWriteView.swift in Sources */, - C5A1691A2C4D53CF0028BCC0 /* SingIn.swift in Sources */, + C5A1691A2C4D53CF0028BCC0 /* SingInInfo.swift in Sources */, C51BBAD52A78D53D00BF5B7C /* AVIROCheckPlace+DTO.swift in Sources */, C5ED996E2C0890CE0077B2F9 /* StoreInfoRepositoryInterface.swift in Sources */, C56857802A7113C600F52715 /* NormalTableViewCell.swift in Sources */, diff --git a/AVIRO/App/AppController.swift b/AVIRO/App/AppController.swift index 1df6b2a4..0e23c17a 100644 --- a/AVIRO/App/AppController.swift +++ b/AVIRO/App/AppController.swift @@ -53,7 +53,6 @@ final class AppController { return } - // login type 업데이트 전 자동로그인 적용을 위해 사전 작업 if let loginType = UserDefaults.standard.string(forKey: UDKey.loginType.rawValue) { switch loginType { case "apple": @@ -64,6 +63,7 @@ final class AppController { checkMemberFromOthers() } } else { + // login type 업데이트 전 자동로그인 적용을 위해 사전 작업 if let userKey = keychain.get(KeychainKey.appleRefreshToken.rawValue) { UserDefaults.standard.set( LoginTypeKey.apple.rawValue, @@ -76,14 +76,17 @@ final class AppController { ) keychain.delete(KeychainKey.appleRefreshToken.rawValue) + + checkMemberFromApple() } else { UserDefaults.standard.set( LoginTypeKey.none.rawValue, forKey: UDKey.loginType.rawValue ) + + setLoginView() } } - } private func checkMemberFromApple() { diff --git a/AVIRO/Domain/Entities/SignIn/SingIn.swift b/AVIRO/Domain/Entities/SignIn/SingIn.swift deleted file mode 100644 index bd4c5c16..00000000 --- a/AVIRO/Domain/Entities/SignIn/SingIn.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// Singin.swift -// AVIRO -// -// Created by 전성훈 on 7/21/24. -// - -import Foundation diff --git a/AVIRO/Domain/Entities/SignIn/SingInInfo.swift b/AVIRO/Domain/Entities/SignIn/SingInInfo.swift new file mode 100644 index 00000000..eb81ee0e --- /dev/null +++ b/AVIRO/Domain/Entities/SignIn/SingInInfo.swift @@ -0,0 +1,21 @@ +// +// Singin.swift +// AVIRO +// +// Created by 전성훈 on 7/21/24. +// + +import Foundation + +struct SignInInfo { + var refreshToken: String? + var accessToken: String? + var userID: String? + var userName: String? + var userEmail: String? + var nickname: String? + var birthday: Int? + var gender: String? + var marketAgree: Bool? + var loginType: LoginType? +} diff --git a/AVIRO/Domain/Entities/User/LoginInfo.swift b/AVIRO/Domain/Entities/User/LoginInfo.swift index c6e627ad..cc31cc74 100644 --- a/AVIRO/Domain/Entities/User/LoginInfo.swift +++ b/AVIRO/Domain/Entities/User/LoginInfo.swift @@ -7,7 +7,7 @@ import Foundation -enum LoginType { +enum LoginType: String { case apple case google case kakao diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index cee8b39f..33293d70 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -15,15 +15,21 @@ protocol SocialLoginUseCaseInterface: AnyObject { func logout( type: LoginType, completion: @escaping (Result) -> Void) - func singin( + func signIn( type: LoginType, completion: @escaping (Result) -> Void) func withdrawal( type: LoginType, completion: @escaping (Result) -> Void) + func firstUpdateSignInInfo(nickname: String) + func secondUpdateSignInInfo(gender: String, birth: Int) + func thridUpdateSignInInfo(marketingAgree: Bool) + func loadSignInInfo() -> SignInInfo } final class SocialLoginUseCase { + private var signinInfo: SignInInfo = SignInInfo() + private let appleLoginRepository: AppleLoginRepositoryInterface private let googleLoginRepository: GoogleLoginRepositoryInterface private let kakaoLoginRepository: KakaoLoginRepositoryInterface @@ -57,7 +63,8 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { if result.isMember { completion(.success(true)) } else { - self?.setupUserData() + self?.setupUserDataFromApple(result) + self?.signinInfo.loginType = .apple completion(.success(false)) } }, errorCompletion: { result in @@ -72,7 +79,9 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { if result.isMember { completion(.success(true)) } else { - self?.setupUserData() + self?.setupUserDataFromOthers(result) + self?.signinInfo.loginType = .google + completion(.success(false)) } }, @@ -88,7 +97,9 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { if result.isMember { completion(.success(true)) } else { - self?.setupUserData() + self?.setupUserDataFromOthers(result) + self?.signinInfo.loginType = .kakao + completion(.success(false)) } }, @@ -102,11 +113,11 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { requestLogin: requestLogin, loginCompletion: { [weak self] result in if result.isMember { - print("testtoto") completion(.success(true)) } else { - self?.setupUserData() - print("test") + self?.setupUserDataFromOthers(result) + self?.signinInfo.loginType = .naver + completion(.success(false)) } }, @@ -118,11 +129,23 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { } } - private func setupUserData() { - + private func setupUserDataFromApple(_ userInfo: SignInFromApple) { + signinInfo.refreshToken = userInfo.userData.refreshToken + signinInfo.accessToken = userInfo.userData.accessToken + signinInfo.userID = userInfo.userData.userId + signinInfo.userName = userInfo.userData.userName + signinInfo.userEmail = userInfo.userData.userEmail + } + + private func setupUserDataFromOthers(_ userInfo: SignInFromKakaoNaver) { + signinInfo.refreshToken = "" + signinInfo.accessToken = "" + signinInfo.userID = userInfo.userData.userId + signinInfo.userName = "" + signinInfo.userEmail = "" } - func singin( + func signIn( type: LoginType, completion: @escaping (Result) -> Void ) { @@ -142,4 +165,21 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { ) { } + + func firstUpdateSignInInfo(nickname: String) { + signinInfo.nickname = nickname + } + + func secondUpdateSignInInfo(gender: String, birth: Int) { + signinInfo.gender = gender + signinInfo.birthday = birth + } + + func thridUpdateSignInInfo(marketingAgree: Bool) { + signinInfo.marketAgree = marketingAgree + } + + func loadSignInInfo() -> SignInInfo { + return signinInfo + } } diff --git a/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift b/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift index 4826233e..dd41b42f 100644 --- a/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift +++ b/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift @@ -49,7 +49,7 @@ struct AVIROKakaoUserCheckMemberDTO: Encodable { struct AVIROKakaoUserCheckMemberResultDTO: Decodable { let statusCode: Int - let data: AVIROKakaoUserRawData? + let data: AVIROKakaoUserRawData? let message: String? } @@ -68,6 +68,23 @@ struct AVIROAppleUserSignUpDTO: Codable { var birthday: Int? var gender: String? var marketingAgree: Bool? + var type: String + + static func makeUserSignUpDTO(signInInfo: SignInInfo) -> Self { + let dto = AVIROAppleUserSignUpDTO( + refreshToken: signInInfo.refreshToken ?? "", + accessToken: signInInfo.accessToken ?? "", + userId: signInInfo.userID ?? "", + userName: signInInfo.userName, + userEmail: signInInfo.userEmail, + birthday: signInInfo.birthday, + gender: signInInfo.gender, + marketingAgree: signInInfo.marketAgree, + type: signInInfo.loginType?.rawValue ?? "" + ) + + return dto + } } struct AVIROUserSignUpResultDTO: Decodable { diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewController/FirstRegistrationViewController.swift b/AVIRO/Scene/Feature/Login/Registration/ViewController/FirstRegistrationViewController.swift index 2f4151bd..a066ca29 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewController/FirstRegistrationViewController.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewController/FirstRegistrationViewController.swift @@ -35,7 +35,7 @@ private enum Layout { } final class FirstRegistrationViewController: UIViewController { - lazy var presenter = FirstRegistrationPresenter(viewController: self) + var presenter: FirstRegistrationPresenter! // MARK: UI Property Definitions private lazy var titleLabel: UILabel = { @@ -238,18 +238,21 @@ extension FirstRegistrationViewController: FirstRegistrationProtocol { // MARK: Push Interactions func pushSecondRegistrationView( - _ userInfoModel: AVIROAppleUserSignUpDTO + usecase: SocialLoginUseCaseInterface ) { let viewController = SecondRegistrationViewController() let presenter = SecondRegistrationPresenter( - viewController: viewController, - userInfoModel: userInfoModel + socialLoginUseCase: usecase, + viewController: viewController ) viewController.presenter = presenter - navigationController?.pushViewController(viewController, animated: true) + navigationController?.pushViewController( + viewController, + animated: true + ) } // MARK: Alert Intercations diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewController/SecondRegistrationViewController.swift b/AVIRO/Scene/Feature/Login/Registration/ViewController/SecondRegistrationViewController.swift index 7ec4e038..5918b197 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewController/SecondRegistrationViewController.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewController/SecondRegistrationViewController.swift @@ -40,7 +40,7 @@ private enum Layout { } final class SecondRegistrationViewController: UIViewController { - lazy var presenter = SecondRegistrationPresenter(viewController: self) + var presenter: SecondRegistrationPresenter! // MARK: UI Property Definitions private lazy var titleLabel: UILabel = { @@ -315,18 +315,21 @@ extension SecondRegistrationViewController: SecondRegistrationProtocol { // MARK: Push Interactions func pushThridRegistrationView( - _ userInfoModel: AVIROAppleUserSignUpDTO + usecase: SocialLoginUseCaseInterface ) { let viewController = ThridRegistrationViewController() let presenter = ThridRegistrationPresenter( - viewController: viewController, - userInfo: userInfoModel + socialLoginUseCase: usecase, + viewController: viewController ) viewController.presenter = presenter - navigationController?.pushViewController(viewController, animated: true) + navigationController?.pushViewController( + viewController, + animated: true + ) } } diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewController/ThridRegistrationViewController.swift b/AVIRO/Scene/Feature/Login/Registration/ViewController/ThridRegistrationViewController.swift index 157231d8..81b28f7c 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewController/ThridRegistrationViewController.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewController/ThridRegistrationViewController.swift @@ -35,7 +35,7 @@ private enum Layout { final class ThridRegistrationViewController: UIViewController { - lazy var presenter = ThridRegistrationPresenter(viewController: self) + var presenter: ThridRegistrationPresenter! // MARK: UI Property Definitions private lazy var titleLabel: UILabel = { diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/FirstRegistrationPresenter.swift b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/FirstRegistrationPresenter.swift index c3234e27..7b632d22 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/FirstRegistrationPresenter.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/FirstRegistrationPresenter.swift @@ -14,7 +14,7 @@ protocol FirstRegistrationProtocol: NSObject { func changeSubInfo(subInfo: String, isVaild: Bool) - func pushSecondRegistrationView(_ signupModel: AVIROAppleUserSignUpDTO) + func pushSecondRegistrationView(usecase: SocialLoginUseCaseInterface) func showErrorAlert(with error: String, title: String?) } @@ -22,6 +22,8 @@ protocol FirstRegistrationProtocol: NSObject { final class FirstRegistrationPresenter { weak var viewController: FirstRegistrationProtocol? + private let socialLoginUseCase: SocialLoginUseCaseInterface! + var appleSignUpModel: AVIROAppleUserSignUpDTO? var userNickname: String? { @@ -39,20 +41,27 @@ final class FirstRegistrationPresenter { } private var timer: Timer? - - init(viewController: FirstRegistrationProtocol, - appleUserSignUpModel: AVIROAppleUserSignUpDTO? = nil + + init( + socialLoginUseCase: SocialLoginUseCaseInterface, + viewController: FirstRegistrationProtocol, + appleUserSignUpModel: AVIROAppleUserSignUpDTO? = nil ) { + self.socialLoginUseCase = socialLoginUseCase self.viewController = viewController self.appleSignUpModel = appleUserSignUpModel } - + + deinit { + print("FirstRegistration Protocol Deinit") + } + func viewDidLoad() { viewController?.setupLayout() viewController?.setupAttribute() viewController?.setupGesture() } - + func insertUserNickName(_ userName: String) { userNickname = userName } @@ -62,7 +71,7 @@ final class FirstRegistrationPresenter { } @objc private func checkDuplication() { - + guard let userNickname = userNickname else { return } let nickname = AVIRONicknameIsDuplicatedCheckDTO(nickname: userNickname) @@ -91,10 +100,10 @@ final class FirstRegistrationPresenter { } func pushUserInfo() { - guard var appleSignUpModel = appleSignUpModel else { return } + guard let userNickname = userNickname else { return } - appleSignUpModel.nickname = userNickname + socialLoginUseCase.firstUpdateSignInInfo(nickname: userNickname) - viewController?.pushSecondRegistrationView(appleSignUpModel) + viewController?.pushSecondRegistrationView(usecase: socialLoginUseCase) } } diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/SecondRegistrationPresenter.swift b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/SecondRegistrationPresenter.swift index e31c9228..7d4f66be 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/SecondRegistrationPresenter.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/SecondRegistrationPresenter.swift @@ -15,12 +15,14 @@ protocol SecondRegistrationProtocol: NSObject { func isValidDate(with isValid: Bool) - func pushThridRegistrationView(_ userInfoModel: AVIROAppleUserSignUpDTO) + func pushThridRegistrationView(usecase: SocialLoginUseCaseInterface) } final class SecondRegistrationPresenter { weak var viewController: SecondRegistrationProtocol? + private let socialLoginUseCase: SocialLoginUseCaseInterface! + private var userInfoModel: AVIROAppleUserSignUpDTO? var birth = "" { @@ -42,9 +44,12 @@ final class SecondRegistrationPresenter { private var timer: Timer? - init(viewController: SecondRegistrationProtocol, + init( + socialLoginUseCase: SocialLoginUseCaseInterface, + viewController: SecondRegistrationProtocol, userInfoModel: AVIROAppleUserSignUpDTO? = nil ) { + self.socialLoginUseCase = socialLoginUseCase self.viewController = viewController self.userInfoModel = userInfoModel } @@ -58,22 +63,19 @@ final class SecondRegistrationPresenter { func pushUserInfo() { guard var userInfoModel = userInfoModel else { return } - + let gender = gender?.rawValue ?? "" if isWrongBirth { birth = "0" } - - if let gender = gender { - userInfoModel.gender = gender.rawValue - } else { - userInfoModel.gender = "" - } let birth = Int(birth.components(separatedBy: ".").joined()) ?? 0 + + socialLoginUseCase.secondUpdateSignInInfo( + gender: gender, + birth: birth + ) - userInfoModel.birthday = birth - - viewController?.pushThridRegistrationView(userInfoModel) + viewController?.pushThridRegistrationView(usecase: socialLoginUseCase) } @objc func afterEndTimer() { diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift index 4c5e8758..86706e88 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift @@ -27,7 +27,8 @@ final class ThridRegistrationPresenter { private let keyChain = KeychainSwift() private let amplitude: AmplitudeProtocol - + private let socialLoginUseCase: SocialLoginUseCaseInterface! + private var userInfoModel: AVIROAppleUserSignUpDTO? var terms: [(Term, Bool)] = [ @@ -36,10 +37,13 @@ final class ThridRegistrationPresenter { (.locationService, false) ] - init(viewController: ThridRegistrationProtocol, + init( + socialLoginUseCase: SocialLoginUseCaseInterface, + viewController: ThridRegistrationProtocol, userInfo: AVIROAppleUserSignUpDTO? = nil, amplitude: AmplitudeProtocol = AmplitudeUtility() ) { + self.socialLoginUseCase = socialLoginUseCase self.viewController = viewController self.userInfoModel = userInfo self.amplitude = amplitude @@ -65,18 +69,33 @@ final class ThridRegistrationPresenter { } func pushUserInfo() { - guard var userInfoModel = userInfoModel else { return } + let userInfo = socialLoginUseCase.loadSignInInfo() + + let userSignUpDTO = AVIROAppleUserSignUpDTO.makeUserSignUpDTO(signInInfo: userInfo) - userInfoModel.marketingAgree = false - - AVIROAPI.manager.createAppleUser(with: userInfoModel) { [weak self] result in + AVIROAPI.manager.createAppleUser(with: userSignUpDTO) { [weak self] result in switch result { case .success(let success): if success.statusCode == 200 { if let data = success.data { - self?.keyChain.set( - userInfoModel.refreshToken, - forKey: KeychainKey.appleRefreshToken.rawValue) + switch userInfo.loginType { + case .apple: + self?.keyChain.set( + userInfo.refreshToken ?? "", + forKey: KeychainKey.refreshToken.rawValue + ) + self?.keyChain.delete( + KeychainKey.userID.rawValue + ) + default: + self?.keyChain.set( + userInfo.userID ?? "", + forKey: KeychainKey.userID.rawValue + ) + self?.keyChain.delete( + KeychainKey.refreshToken.rawValue + ) + } self?.amplitude.signUp(with: data.userId) MyData.my.whenLogin( diff --git a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift index c73e8690..09d92c82 100644 --- a/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift +++ b/AVIRO/Scene/Feature/Login/ViewController/LoginViewController.swift @@ -184,7 +184,7 @@ extension LoginViewController: LoginViewProtocol { // MARK: UI Interactions @objc private func tapAppleLogin() { - presenter.clickedAppleLogin() +// presenter.clickedAppleLogin() } func switchIsLoading(with loading: Bool) { @@ -205,30 +205,34 @@ extension LoginViewController: LoginViewProtocol { } // TODO: 코드 수정 필요 - func pushRegistrationView() { + func pushRegistrationView(usecase: SocialLoginUseCaseInterface) { let viewController = FirstRegistrationViewController() - let presenter = FirstRegistrationPresenter(viewController: viewController) + let presenter = FirstRegistrationPresenter( + socialLoginUseCase: usecase, + viewController: viewController + ) viewController.presenter = presenter self.navigationController?.pushViewController(viewController, animated: true) } - func pushRegistrationWhenAppleLogin(_ userModel: AVIROAppleUserSignUpDTO) { - DispatchQueue.main.async { [weak self] in - let viewController = FirstRegistrationViewController() - - let presenter = FirstRegistrationPresenter( - viewController: viewController, - appleUserSignUpModel: userModel - ) - - viewController.presenter = presenter - - self?.navigationController?.pushViewController(viewController, animated: true) - } - } +// func pushRegistrationWhenAppleLogin(_ userModel: AVIROAppleUserSignUpDTO) { +// DispatchQueue.main.async { [weak self] in +// let viewController = FirstRegistrationViewController() +// +// let presenter = FirstRegistrationPresenter( +// socialLoginUseCase: +// viewController: viewController, +// appleUserSignUpModel: userModel +// ) +// +// viewController.presenter = presenter +// +// self?.navigationController?.pushViewController(viewController, animated: true) +// } +// } // MARK: Alert Interactions func afterLogoutAndMakeToastButton() { diff --git a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift index 84e9f924..8f6d9d69 100644 --- a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift +++ b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift @@ -6,7 +6,7 @@ // import UIKit -import AuthenticationServices +//import AuthenticationServices import KeychainSwift @@ -17,8 +17,8 @@ protocol LoginViewProtocol: NSObject { func switchIsLoading(with loading: Bool) func pushTabBar() - func pushRegistrationWhenAppleLogin(_ userModel: AVIROAppleUserSignUpDTO) - func pushRegistrationView() +// func pushRegistrationWhenAppleLogin(_ userModel: AVIROAppleUserSignUpDTO) + func pushRegistrationView(usecase: SocialLoginUseCaseInterface) func afterLogoutAndMakeToastButton() func afterWithdrawalUserShowAlert() @@ -63,67 +63,67 @@ final class LoginViewPresenter: NSObject { } } - // MARK: Clicke Apple Login - func clickedAppleLogin() { - let request = ASAuthorizationAppleIDProvider().createRequest() - request.requestedScopes = [.fullName, .email] - - let authorizationController = ASAuthorizationController(authorizationRequests: [request]) - authorizationController.delegate = self - authorizationController.presentationContextProvider = self - as? ASAuthorizationControllerPresentationContextProviding - authorizationController.performRequests() - } +// // MARK: Clicke Apple Login +// func clickedAppleLogin() { +// let request = ASAuthorizationAppleIDProvider().createRequest() +// request.requestedScopes = [.fullName, .email] +// +// let authorizationController = ASAuthorizationController(authorizationRequests: [request]) +// authorizationController.delegate = self +// authorizationController.presentationContextProvider = self +// as? ASAuthorizationControllerPresentationContextProviding +// authorizationController.performRequests() +// } - // MARK: Login 후 최초인지 아닌지 확인 처리 - func whenCheckAfterAppleLogin(with model: AppleUserLoginModel) { - viewController?.switchIsLoading(with: true) - - let checkAppleLoginModel = AVIROAppleUserCheckMemberDTO( - identityToken: model.identityToken, - authorizationCode: model.authorizationCode - ) - - AVIROAPI.manager.checkAppleUserWhenLogin(with: checkAppleLoginModel) { [weak self] result in - switch result { - case .success(let success): - if success.statusCode == 200 { - if let data = success.data { - if data.isMember { - - self?.keychain.set( - data.refreshToken, - forKey: KeychainKey.appleRefreshToken.rawValue) - - self?.loadUserDataWhenAppleLogin() - - } else { - let model = AVIROAppleUserSignUpDTO( - refreshToken: data.refreshToken, - accessToken: data.accessToken, - userId: data.userId ?? "", - userName: model.userName, - userEmail: model.userEmail, - marketingAgree: false - ) - - self?.viewController?.pushRegistrationWhenAppleLogin(model) - } - } - } else { - if let message = success.message { - self?.viewController?.switchIsLoading(with: false) - self?.viewController?.showErrorAlert(with: message, title: nil) - } - } - case .failure(let error): - if let error = error.errorDescription { - self?.viewController?.switchIsLoading(with: false) - self?.viewController?.showErrorAlert(with: error, title: nil) - } - } - } - } +// // MARK: Login 후 최초인지 아닌지 확인 처리 +// func whenCheckAfterAppleLogin(with model: AppleUserLoginModel) { +// viewController?.switchIsLoading(with: true) +// +// let checkAppleLoginModel = AVIROAppleUserCheckMemberDTO( +// identityToken: model.identityToken, +// authorizationCode: model.authorizationCode +// ) +// +// AVIROAPI.manager.checkAppleUserWhenLogin(with: checkAppleLoginModel) { [weak self] result in +// switch result { +// case .success(let success): +// if success.statusCode == 200 { +// if let data = success.data { +// if data.isMember { +// +// self?.keychain.set( +// data.refreshToken, +// forKey: KeychainKey.appleRefreshToken.rawValue) +// +// self?.loadUserDataWhenAppleLogin() +// +// } else { +// let model = AVIROAppleUserSignUpDTO( +// refreshToken: data.refreshToken, +// accessToken: data.accessToken, +// userId: data.userId ?? "", +// userName: model.userName, +// userEmail: model.userEmail, +// marketingAgree: false +// ) +// +// self?.viewController?.pushRegistrationWhenAppleLogin(model) +// } +// } +// } else { +// if let message = success.message { +// self?.viewController?.switchIsLoading(with: false) +// self?.viewController?.showErrorAlert(with: message, title: nil) +// } +// } +// case .failure(let error): +// if let error = error.errorDescription { +// self?.viewController?.switchIsLoading(with: false) +// self?.viewController?.showErrorAlert(with: error, title: nil) +// } +// } +// } +// } // MARK: Apple Login User Info 불러오기 private func loadUserDataWhenAppleLogin() { @@ -179,7 +179,8 @@ final class LoginViewPresenter: NSObject { if isMember { self?.viewController?.pushTabBar() } else { - self?.viewController?.pushRegistrationView() + let usecase = self?.socialLoginUseCase + self?.viewController?.pushRegistrationView(usecase: usecase!) } case .failure(let error): self?.viewController?.switchIsLoading(with: false) @@ -191,31 +192,31 @@ final class LoginViewPresenter: NSObject { } } -// MARK: Apple Login 처리 설정 -extension LoginViewPresenter: ASAuthorizationControllerDelegate { - func authorizationController( - controller: ASAuthorizationController, - didCompleteWithAuthorization authorization: ASAuthorization - ) { - if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { - guard let authorizationCode = appleIDCredential.authorizationCode, - let identityToken = appleIDCredential.identityToken - else { return } - - let code = String(data: authorizationCode, encoding: .utf8)! - let token = String(data: identityToken, encoding: .utf8)! - - let fullName = appleIDCredential.fullName?.formatted() ?? " " - let email = appleIDCredential.email ?? " " - - let model = AppleUserLoginModel( - identityToken: token, - authorizationCode: code, - userName: fullName, - userEmail: email - ) - - whenCheckAfterAppleLogin(with: model) - } - } -} +//// MARK: Apple Login 처리 설정 +//extension LoginViewPresenter: ASAuthorizationControllerDelegate { +// func authorizationController( +// controller: ASAuthorizationController, +// didCompleteWithAuthorization authorization: ASAuthorization +// ) { +// if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { +// guard let authorizationCode = appleIDCredential.authorizationCode, +// let identityToken = appleIDCredential.identityToken +// else { return } +// +// let code = String(data: authorizationCode, encoding: .utf8)! +// let token = String(data: identityToken, encoding: .utf8)! +// +// let fullName = appleIDCredential.fullName?.formatted() ?? " " +// let email = appleIDCredential.email ?? " " +// +// let model = AppleUserLoginModel( +// identityToken: token, +// authorizationCode: code, +// userName: fullName, +// userEmail: email +// ) +// +//// whenCheckAfterAppleLogin(with: model) +// } +// } +//} From f949d7ce436c3378fd9482ae5cc336f0711221e4 Mon Sep 17 00:00:00 2001 From: seonghun jeon Date: Sat, 27 Jul 2024 16:29:00 +0900 Subject: [PATCH 30/37] =?UTF-8?q?[Fix]:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EB=A1=9C=EC=A7=81=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift | 1 + .../ViewPresenter/SecondRegistrationPresenter.swift | 1 - .../ViewPresenter/ThridRegistrationPresenter.swift | 5 +++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift b/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift index dd41b42f..c42e8095 100644 --- a/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift +++ b/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift @@ -77,6 +77,7 @@ struct AVIROAppleUserSignUpDTO: Codable { userId: signInInfo.userID ?? "", userName: signInInfo.userName, userEmail: signInInfo.userEmail, + nickname: signInInfo.nickname, birthday: signInInfo.birthday, gender: signInInfo.gender, marketingAgree: signInInfo.marketAgree, diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/SecondRegistrationPresenter.swift b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/SecondRegistrationPresenter.swift index 7d4f66be..13a9469f 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/SecondRegistrationPresenter.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/SecondRegistrationPresenter.swift @@ -62,7 +62,6 @@ final class SecondRegistrationPresenter { } func pushUserInfo() { - guard var userInfoModel = userInfoModel else { return } let gender = gender?.rawValue ?? "" if isWrongBirth { birth = "0" diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift index 86706e88..ed48e556 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift @@ -69,10 +69,15 @@ final class ThridRegistrationPresenter { } func pushUserInfo() { + socialLoginUseCase.thridUpdateSignInInfo(marketingAgree: false) + let userInfo = socialLoginUseCase.loadSignInInfo() let userSignUpDTO = AVIROAppleUserSignUpDTO.makeUserSignUpDTO(signInInfo: userInfo) + print(userInfo) + print(userSignUpDTO) + AVIROAPI.manager.createAppleUser(with: userSignUpDTO) { [weak self] result in switch result { case .success(let success): From 8bd23522c7167423e2e2183d03af03b5dcf4ec09 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Sat, 27 Jul 2024 20:39:13 +0900 Subject: [PATCH 31/37] =?UTF-8?q?[Feat]:=20Login=20out=20&=20Withrawal=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO/App/AppController.swift | 7 +- .../Domain/UseCases/SocialLoginUseCase.swift | 39 ++++++ .../ViewPresenter/SettingViewPresenter.swift | 13 ++ .../ThridRegistrationPresenter.swift | 5 + .../ViewPresenter/LoginViewPresenter.swift | 131 ------------------ 5 files changed, 62 insertions(+), 133 deletions(-) diff --git a/AVIRO/App/AppController.swift b/AVIRO/App/AppController.swift index 0e23c17a..9deffdd6 100644 --- a/AVIRO/App/AppController.swift +++ b/AVIRO/App/AppController.swift @@ -57,10 +57,12 @@ final class AppController { switch loginType { case "apple": checkMemberFromApple() + case "google", "kakao", "naver": + checkMemberFromOthers() case "none": setLoginView() default: - checkMemberFromOthers() + setLoginView() } } else { // login type 업데이트 전 자동로그인 적용을 위해 사전 작업 @@ -131,12 +133,13 @@ final class AppController { keychain.delete(KeychainKey.refreshToken.rawValue) guard let userID = keychain.get(KeychainKey.userID.rawValue) else { + print("ADAWDAW") setLoginView() return } let userCheck = AVIROKakaoUserCheckMemberDTO(userId: userID) - + print("TSET") AVIROAPI.manager.checkKakaoUserWhenLogin(with: userCheck) { [weak self] result in DispatchQueue.main.async { switch result { diff --git a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift index 33293d70..0df38916 100644 --- a/AVIRO/Domain/UseCases/SocialLoginUseCase.swift +++ b/AVIRO/Domain/UseCases/SocialLoginUseCase.swift @@ -7,6 +7,8 @@ import Foundation +import KeychainSwift + protocol SocialLoginUseCaseInterface: AnyObject { func checkMember( type: LoginType, @@ -30,6 +32,8 @@ protocol SocialLoginUseCaseInterface: AnyObject { final class SocialLoginUseCase { private var signinInfo: SignInInfo = SignInInfo() + private let keychain = KeychainSwift() + private let appleLoginRepository: AppleLoginRepositoryInterface private let googleLoginRepository: GoogleLoginRepositoryInterface private let kakaoLoginRepository: KakaoLoginRepositoryInterface @@ -61,7 +65,16 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { requestLogin: requestLogin, loginCompletion: { [weak self] result in if result.isMember { + UserDefaults.standard.set( + "apple", + forKey: UDKey.loginType.rawValue + ) + self?.keychain.set( + result.userData.refreshToken, + forKey: KeychainKey.refreshToken.rawValue + ) completion(.success(true)) + } else { self?.setupUserDataFromApple(result) self?.signinInfo.loginType = .apple @@ -77,7 +90,16 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { requestLogin: requestLogin, loginCompletion: { [weak self] result in if result.isMember { + UserDefaults.standard.set( + "google", + forKey: UDKey.loginType.rawValue + ) + self?.keychain.set( + result.userData.userId ?? "" , + forKey: KeychainKey.userID.rawValue + ) completion(.success(true)) + } else { self?.setupUserDataFromOthers(result) self?.signinInfo.loginType = .google @@ -95,6 +117,14 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { requestLogin: requestLogin, loginCompletion: { [weak self] result in if result.isMember { + UserDefaults.standard.set( + "kakao", + forKey: UDKey.loginType.rawValue + ) + self?.keychain.set( + result.userData.userId ?? "", + forKey: KeychainKey.userID.rawValue + ) completion(.success(true)) } else { self?.setupUserDataFromOthers(result) @@ -113,6 +143,15 @@ extension SocialLoginUseCase: SocialLoginUseCaseInterface { requestLogin: requestLogin, loginCompletion: { [weak self] result in if result.isMember { + UserDefaults.standard.set( + "naver", + forKey: UDKey.loginType.rawValue + ) + self?.keychain.set( + result.userData.userId ?? "" , + forKey: KeychainKey.userID.rawValue + ) + completion(.success(true)) } else { self?.setupUserDataFromOthers(result) diff --git a/AVIRO/Scene/Feature/Challenge/Setting/ViewPresenter/SettingViewPresenter.swift b/AVIRO/Scene/Feature/Challenge/Setting/ViewPresenter/SettingViewPresenter.swift index a005dc50..618b5167 100644 --- a/AVIRO/Scene/Feature/Challenge/Setting/ViewPresenter/SettingViewPresenter.swift +++ b/AVIRO/Scene/Feature/Challenge/Setting/ViewPresenter/SettingViewPresenter.swift @@ -103,6 +103,12 @@ final class SettingViewPresenter { UserCoordinate.shared.isFirstLoadLocation = false self.keychain.delete(KeychainKey.appleRefreshToken.rawValue) + self.keychain.delete(KeychainKey.refreshToken.rawValue) + self.keychain.delete(KeychainKey.userID.rawValue) + UserDefaults.standard.set( + "none", + forKey: UDKey.loginType.rawValue + ) viewController?.pushLoginViewController(type: .logout) } @@ -123,6 +129,13 @@ final class SettingViewPresenter { MyData.my.whenLogout() UserCoordinate.shared.isFirstLoadLocation = false self?.keychain.delete(KeychainKey.appleRefreshToken.rawValue) + self?.keychain.delete(KeychainKey.refreshToken.rawValue) + self?.keychain.delete(KeychainKey.userID.rawValue) + UserDefaults.standard.set( + "none", + forKey: UDKey.loginType.rawValue + ) + self?.amplitude.withdrawal() DispatchQueue.main.async { diff --git a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift index ed48e556..599d08ce 100644 --- a/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift +++ b/AVIRO/Scene/Feature/Login/Registration/ViewPresenter/ThridRegistrationPresenter.swift @@ -83,6 +83,11 @@ final class ThridRegistrationPresenter { case .success(let success): if success.statusCode == 200 { if let data = success.data { + UserDefaults.standard.setValue( + userInfo.loginType?.rawValue, + forKey: UDKey.loginType.rawValue + ) + switch userInfo.loginType { case .apple: self?.keyChain.set( diff --git a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift index 8f6d9d69..025b2641 100644 --- a/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift +++ b/AVIRO/Scene/Feature/Login/ViewPresenter/LoginViewPresenter.swift @@ -6,7 +6,6 @@ // import UIKit -//import AuthenticationServices import KeychainSwift @@ -17,7 +16,6 @@ protocol LoginViewProtocol: NSObject { func switchIsLoading(with loading: Bool) func pushTabBar() -// func pushRegistrationWhenAppleLogin(_ userModel: AVIROAppleUserSignUpDTO) func pushRegistrationView(usecase: SocialLoginUseCaseInterface) func afterLogoutAndMakeToastButton() @@ -63,105 +61,6 @@ final class LoginViewPresenter: NSObject { } } -// // MARK: Clicke Apple Login -// func clickedAppleLogin() { -// let request = ASAuthorizationAppleIDProvider().createRequest() -// request.requestedScopes = [.fullName, .email] -// -// let authorizationController = ASAuthorizationController(authorizationRequests: [request]) -// authorizationController.delegate = self -// authorizationController.presentationContextProvider = self -// as? ASAuthorizationControllerPresentationContextProviding -// authorizationController.performRequests() -// } - -// // MARK: Login 후 최초인지 아닌지 확인 처리 -// func whenCheckAfterAppleLogin(with model: AppleUserLoginModel) { -// viewController?.switchIsLoading(with: true) -// -// let checkAppleLoginModel = AVIROAppleUserCheckMemberDTO( -// identityToken: model.identityToken, -// authorizationCode: model.authorizationCode -// ) -// -// AVIROAPI.manager.checkAppleUserWhenLogin(with: checkAppleLoginModel) { [weak self] result in -// switch result { -// case .success(let success): -// if success.statusCode == 200 { -// if let data = success.data { -// if data.isMember { -// -// self?.keychain.set( -// data.refreshToken, -// forKey: KeychainKey.appleRefreshToken.rawValue) -// -// self?.loadUserDataWhenAppleLogin() -// -// } else { -// let model = AVIROAppleUserSignUpDTO( -// refreshToken: data.refreshToken, -// accessToken: data.accessToken, -// userId: data.userId ?? "", -// userName: model.userName, -// userEmail: model.userEmail, -// marketingAgree: false -// ) -// -// self?.viewController?.pushRegistrationWhenAppleLogin(model) -// } -// } -// } else { -// if let message = success.message { -// self?.viewController?.switchIsLoading(with: false) -// self?.viewController?.showErrorAlert(with: message, title: nil) -// } -// } -// case .failure(let error): -// if let error = error.errorDescription { -// self?.viewController?.switchIsLoading(with: false) -// self?.viewController?.showErrorAlert(with: error, title: nil) -// } -// } -// } -// } - - // MARK: Apple Login User Info 불러오기 - private func loadUserDataWhenAppleLogin() { - guard let refreshToken = keychain.get(KeychainKey.appleRefreshToken.rawValue) else { - viewController?.showErrorAlert(with: "재시도 해주세요.", title: nil) - return - } - - let model = AVIROAutoLoginWhenAppleUserDTO(refreshToken: refreshToken) - - AVIROAPI.manager.checkAppleUserWhenInitiate(with: model) { [weak self] result in - switch result { - case .success(let success): - if success.statusCode == 200 { - if let data = success.data { - MyData.my.whenLogin( - userId: data.userId, - userName: data.userName, - userEmail: data.userEmail, - userNickname: data.nickname, - marketingAgree: data.marketingAgree - ) - self?.viewController?.pushTabBar() - } - } else { - if let message = success.message { - self?.viewController?.showErrorAlert(with: message, title: nil) - } - } - case .failure(let error): - if let error = error.errorDescription { - self?.viewController?.switchIsLoading(with: true) - self?.viewController?.showErrorAlert(with: error, title: nil) - } - } - } - } - func checkMember(type: LoginType) { socialLoginUseCase.checkMember( type: type, @@ -175,7 +74,6 @@ final class LoginViewPresenter: NSObject { switch result { case .success(let isMember): self?.viewController?.switchIsLoading(with: false) - if isMember { self?.viewController?.pushTabBar() } else { @@ -191,32 +89,3 @@ final class LoginViewPresenter: NSObject { ) } } - -//// MARK: Apple Login 처리 설정 -//extension LoginViewPresenter: ASAuthorizationControllerDelegate { -// func authorizationController( -// controller: ASAuthorizationController, -// didCompleteWithAuthorization authorization: ASAuthorization -// ) { -// if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential { -// guard let authorizationCode = appleIDCredential.authorizationCode, -// let identityToken = appleIDCredential.identityToken -// else { return } -// -// let code = String(data: authorizationCode, encoding: .utf8)! -// let token = String(data: identityToken, encoding: .utf8)! -// -// let fullName = appleIDCredential.fullName?.formatted() ?? " " -// let email = appleIDCredential.email ?? " " -// -// let model = AppleUserLoginModel( -// identityToken: token, -// authorizationCode: code, -// userName: fullName, -// userEmail: email -// ) -// -//// whenCheckAfterAppleLogin(with: model) -// } -// } -//} From 395a5be2a46eb7a10fc1680433e62cd37626d47c Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Sat, 27 Jul 2024 21:45:01 +0900 Subject: [PATCH 32/37] =?UTF-8?q?[Feat]:=20Revoke=20User=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../APIManager/AVIROManager/AVIROAPI.swift | 2 +- .../AVIROAPIManagerProtocol.swift | 2 +- .../AVIRO/AVIROPost/User/AVIROUser+DTO.swift | 5 ++ .../ViewPresenter/SettingViewPresenter.swift | 53 +++++++------------ 4 files changed, 25 insertions(+), 37 deletions(-) diff --git a/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift b/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift index c448239e..49c9d825 100644 --- a/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift +++ b/AVIRO/Manager/APIManager/AVIROManager/AVIROAPI.swift @@ -846,7 +846,7 @@ final class AVIROAPI: AVIROAPIMangerProtocol { // MARK: POST Revoke User - Apple func revokeAppleUser( - with user: AVIROAutoLoginWhenAppleUserDTO, + with user: AVIRORevokeUserDTO, completionHandler: @escaping (Result) -> Void ) { guard let url = postAPI.appleUserRevoke().url else { diff --git a/AVIRO/Manager/APIManager/AVIROManager/AVIROAPIManagerProtocol.swift b/AVIRO/Manager/APIManager/AVIROManager/AVIROAPIManagerProtocol.swift index e81cde96..0ad211d4 100644 --- a/AVIRO/Manager/APIManager/AVIROManager/AVIROAPIManagerProtocol.swift +++ b/AVIRO/Manager/APIManager/AVIROManager/AVIROAPIManagerProtocol.swift @@ -257,7 +257,7 @@ protocol AVIROAPIMangerProtocol: APIManagerProtocol { // MARK: POST Revoke User - Apple func revokeAppleUser( - with user: AVIROAutoLoginWhenAppleUserDTO, + with user: AVIRORevokeUserDTO, completionHandler: @escaping (Result) -> Void ) diff --git a/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift b/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift index c42e8095..c49692eb 100644 --- a/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift +++ b/AVIRO/Model/APIResonseModel/AVIRO/AVIROPost/User/AVIROUser+DTO.swift @@ -17,6 +17,11 @@ struct AVIROAutoLoginWhenAppleUserResultDTO: Decodable { let message: String? } +struct AVIRORevokeUserDTO: Encodable { + let refreshToken: String + let type: String +} + struct AVIROUserDataDTO: Codable { let userId: String let userName: String diff --git a/AVIRO/Scene/Feature/Challenge/Setting/ViewPresenter/SettingViewPresenter.swift b/AVIRO/Scene/Feature/Challenge/Setting/ViewPresenter/SettingViewPresenter.swift index 618b5167..d6598e85 100644 --- a/AVIRO/Scene/Feature/Challenge/Setting/ViewPresenter/SettingViewPresenter.swift +++ b/AVIRO/Scene/Feature/Challenge/Setting/ViewPresenter/SettingViewPresenter.swift @@ -63,38 +63,6 @@ final class SettingViewPresenter { // loadMyData() } -// private func loadMyData() { -// let myNickName = MyData.my.nickname -// let myStar = String(BookmarkFacadeManager().loadAllData().count) -// -// AVIROAPIManager().loadMyContributedCount(with: MyData.my.id) { [weak self] result in -// switch result { -// case .success(let success): -// if success.statusCode == 200 { -// if let myPlace = success.data?.placeCount, -// let myReview = success.data?.commentCount { -// -// let myPlaceString = String(myPlace) -// let myReviewString = String(myReview) -// -// self?.myDataModel = MyDataModel( -// id: myNickName, -// place: myPlaceString, -// review: myReviewString, -// star: myStar -// ) -// } -// } else { -// self?.viewController?.showErrorAlert(with: "서버 에러", title: nil) -// } -// case .failure(let error): -// if let error = error.errorDescription { -// self?.viewController?.showErrorAlert(with: error, title: nil) -// } -// } -// } -// } - func whenAfterLogout() { bookmarkManager.deleteAllData() markerManager.deleteAllMarker() @@ -114,11 +82,26 @@ final class SettingViewPresenter { } func whenAfterWithdrawal() { - guard let refreshToken = keychain.get(KeychainKey.appleRefreshToken.rawValue) else { return } + guard let type = UserDefaults.standard.string( + forKey: UDKey.loginType.rawValue + ) else { return } + + var token = "" + + if type == "apple" { + token = keychain.get( + KeychainKey.refreshToken.rawValue + ) ?? "" + } else { + token = keychain.get(KeychainKey.userID.rawValue) ?? "" + } viewController?.switchIsLoading(with: true) - - let model = AVIROAutoLoginWhenAppleUserDTO(refreshToken: refreshToken) + + let model = AVIRORevokeUserDTO( + refreshToken: token, + type: type + ) AVIROAPI.manager.revokeAppleUser(with: model) { [weak self] result in switch result { From 0bfd4661091d28bddc467d6ad5655081ba7b3da8 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Sun, 28 Jul 2024 11:40:06 +0900 Subject: [PATCH 33/37] =?UTF-8?q?[Feat]:=20Tutorial=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20&=20=ED=9A=8C=EC=9B=90=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20Label=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ViewController/Cells/SettingCell.swift | 50 ++++++++++++- .../ViewController/HomeViewController.swift | 74 ++++++++++++------- 2 files changed, 96 insertions(+), 28 deletions(-) diff --git a/AVIRO/Scene/Feature/Challenge/Setting/ViewController/Cells/SettingCell.swift b/AVIRO/Scene/Feature/Challenge/Setting/ViewController/Cells/SettingCell.swift index 39bbb28a..1522baff 100644 --- a/AVIRO/Scene/Feature/Challenge/Setting/ViewController/Cells/SettingCell.swift +++ b/AVIRO/Scene/Feature/Challenge/Setting/ViewController/Cells/SettingCell.swift @@ -44,6 +44,21 @@ final class SettingCell: UITableViewCell { return label }() + private lazy var socialLogo: UIImageView = { + let imageView = UIImageView() + + return imageView + }() + + private lazy var socialLabel: UILabel = { + let lbl = UILabel() + + lbl.textColor = .gray2 + lbl.font = .pretendard(size: 15, weight: .regular) + + return lbl + }() + private var settingValue: SettingsRow! var tappedAfterSettingValue: ((SettingsRow) -> Void)? @@ -66,7 +81,9 @@ final class SettingCell: UITableViewCell { [ settingButton, pushButton, - versionLabel + versionLabel, + socialLogo, + socialLabel ].forEach { $0.translatesAutoresizingMaskIntoConstraints = false self.contentView.addSubview($0) @@ -80,11 +97,21 @@ final class SettingCell: UITableViewCell { pushButton.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20), versionLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor), - versionLabel.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20) + versionLabel.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20), + + socialLogo.centerYAnchor.constraint(equalTo: self.centerYAnchor), + socialLogo.trailingAnchor.constraint(equalTo: socialLabel.leadingAnchor, constant: -3), + socialLogo.widthAnchor.constraint(equalToConstant: 24), + socialLogo.heightAnchor.constraint(equalToConstant: 24), + + socialLabel.centerYAnchor.constraint(equalTo: self.centerYAnchor), + socialLabel.trailingAnchor.constraint(equalTo: self.trailingAnchor, constant: -20) ]) pushButton.isHidden = true versionLabel.isHidden = true + socialLogo.isHidden = true + socialLabel.isHidden = true } private func setupAttribute() { @@ -99,6 +126,25 @@ final class SettingCell: UITableViewCell { if settingsRow == .logout { settingButton.setTitleColor(.red, for: .normal) + socialLogo.isHidden = false + socialLabel.isHidden = false + + switch UserDefaults.standard.string(forKey: UDKey.loginType.rawValue) { + case "apple": + socialLabel.text = "Apple 계정" + socialLogo.image = .appleLogo + case "google": + socialLabel.text = "Google 계정" + socialLogo.image = .googleLogo + case "kakao": + socialLabel.text = "Kakao 계정" + socialLogo.image = .kakaoLogo + case "naver": + socialLabel.text = "Naver 계정" + socialLogo.image = .naverLogo + default: + break + } } self.settingValue = settingsRow diff --git a/AVIRO/Scene/Feature/Home/ViewController/HomeViewController.swift b/AVIRO/Scene/Feature/Home/ViewController/HomeViewController.swift index 6b303d6d..edd4de9b 100644 --- a/AVIRO/Scene/Feature/Home/ViewController/HomeViewController.swift +++ b/AVIRO/Scene/Feature/Home/ViewController/HomeViewController.swift @@ -253,7 +253,8 @@ final class HomeViewController: UIViewController { } private var isFullUpView = false - + private var isTutorialNextPageShow = false + private lazy var whenSlideTapGesture = UITapGestureRecognizer() private lazy var upGesture = UISwipeGestureRecognizer() private lazy var downGesture = UISwipeGestureRecognizer() @@ -298,10 +299,10 @@ extension HomeViewController: HomeViewProtocol { placeView, flagButton, downBackButton, + categoryCollectionView, blurEffectViewForTutorial, speechBubbleViewForColorExplain, speechBubbleViewForCategoryExplain, - categoryCollectionView, blurEffectView, recommendPlaceAlertView, levelUpAlertView, @@ -472,6 +473,13 @@ extension HomeViewController: HomeViewProtocol { emptyEffectView.isHidden = false blurEffectViewForTutorial.isHidden = false speechBubbleViewForColorExplain.isHidden = false + + tabBarDelegate?.activeBlurEffectView(with: true) + } + + private func activeTutorialNextPage() { + speechBubbleViewForColorExplain.isHidden = true + speechBubbleViewForCategoryExplain.isHidden = false presenter.categoryType = [ @@ -486,33 +494,47 @@ extension HomeViewController: HomeViewProtocol { updateSearchTextField(with: "카페") updateSearchTextField(with: "술집") - tabBarDelegate?.activeBlurEffectView(with: true) + view.bringSubviewToFront(blurEffectViewForTutorial) + view.bringSubviewToFront(speechBubbleViewForColorExplain) + view.bringSubviewToFront(speechBubbleViewForCategoryExplain) + view.bringSubviewToFront(categoryCollectionView) + view.bringSubviewToFront(emptyEffectView) } @objc private func tappedTutorial(_ gesture: UITapGestureRecognizer) { - emptyEffectView.isHidden = true - blurEffectViewForTutorial.isHidden = true - speechBubbleViewForColorExplain.isHidden = true - speechBubbleViewForCategoryExplain.isHidden = true - - presenter.categoryType = [ - ("식당", false), - ("카페", false), - ("술집", false), - ("빵집", false) - ] - - categoryCollectionView.reloadData() - - updateSearchTextField(with: "취소") - - UserDefaults.standard.set( - true, - forKey: UDKey.tutorialHome.rawValue - ) - - tabBarDelegate?.activeBlurEffectView(with: false) - tabBarDelegate?.activeCheckWellcome() + if isTutorialNextPageShow { + isTutorialNextPageShow = false + emptyEffectView.isHidden = true + blurEffectViewForTutorial.isHidden = true + speechBubbleViewForCategoryExplain.isHidden = true + + presenter.categoryType = [ + ("식당", false), + ("카페", false), + ("술집", false), + ("빵집", false) + ] + + categoryCollectionView.reloadData() + + updateSearchTextField(with: "취소") + + UserDefaults.standard.set( + true, + forKey: UDKey.tutorialHome.rawValue + ) + + tabBarDelegate?.activeBlurEffectView(with: false) + tabBarDelegate?.activeCheckWellcome() + + view.bringSubviewToFront(blurEffectViewForTutorial) + view.bringSubviewToFront(speechBubbleViewForColorExplain) + view.bringSubviewToFront(speechBubbleViewForCategoryExplain) + view.bringSubviewToFront(emptyEffectView) + } else { + activeTutorialNextPage() + isTutorialNextPageShow = true + } } func setupGesture() { From 98ddbc0d2dda15b2dd0c6fbbcd76f529c972de16 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Sun, 28 Jul 2024 12:13:12 +0900 Subject: [PATCH 34/37] [Chore]: Version update --- AVIRO.xcodeproj/project.pbxproj | 8 +- AVIRO/App/AppController.swift | 46 ------ AVIRO/App/AppDelegate.swift | 13 -- README.md | 285 -------------------------------- 4 files changed, 4 insertions(+), 348 deletions(-) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 02b611bf..dc3e6913 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -3435,7 +3435,7 @@ CODE_SIGN_ENTITLEMENTS = AVIRO/AVIRO.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = C4K2HXA435; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = AVIRO/App/Info.plist; @@ -3454,7 +3454,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.5; + MARKETING_VERSION = 1.3.1; PRODUCT_BUNDLE_IDENTIFIER = SeonghunJeon.VeganRestaurant; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3473,7 +3473,7 @@ CODE_SIGN_ENTITLEMENTS = AVIRO/AVIRO.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = C4K2HXA435; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = AVIRO/App/Info.plist; @@ -3492,7 +3492,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.5; + MARKETING_VERSION = 1.3.1; PRODUCT_BUNDLE_IDENTIFIER = SeonghunJeon.VeganRestaurant; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/AVIRO/App/AppController.swift b/AVIRO/App/AppController.swift index 9deffdd6..4786b0a6 100644 --- a/AVIRO/App/AppController.swift +++ b/AVIRO/App/AppController.swift @@ -169,52 +169,6 @@ final class AppController { } - // MARK: 불러올 view 확인 메서드 - private func checkState() { - let userKey = keychain.get(KeychainKey.appleRefreshToken.rawValue) - - // 최초 튜토리얼 화면 안 봤을 때 - guard UserDefaults.standard.bool(forKey: UDKey.tutorial.rawValue) else { - setTutorialView() - return - } - - // 자동로그인 토큰 없을 때 - guard let userKey = userKey else { - setLoginView() - return - } - - let userCheck = AVIROAutoLoginWhenAppleUserDTO(refreshToken: userKey) - - // TODO: user 정보 불러오기 수정 - AVIROAPI.manager.checkAppleUserWhenInitiate(with: userCheck) { [weak self] result in - DispatchQueue.main.async { - switch result { - case .success(let model): - if model.statusCode == 200 { - if let data = model.data { - MyData.my.whenLogin( - userId: data.userId, - userName: data.userName, - userEmail: data.userEmail, - userNickname: data.nickname, - marketingAgree: data.marketingAgree - ) - self?.setTabBarView() - } - } else { - self?.keychain.delete(KeychainKey.appleRefreshToken.rawValue) - self?.setLoginView() - } - case .failure: - self?.keychain.delete(KeychainKey.appleRefreshToken.rawValue) - self?.setLoginView() - } - } - } - } - // MARK: tutorial View private func setTutorialView() { let tutorialVC = TutorialViewController() diff --git a/AVIRO/App/AppDelegate.swift b/AVIRO/App/AppDelegate.swift index e6361dc7..c9e793ed 100644 --- a/AVIRO/App/AppDelegate.swift +++ b/AVIRO/App/AppDelegate.swift @@ -77,19 +77,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } private func registerRepository() { - // 수정 필요 -// -// let host = AVIROConfiguration.host -// let apiKey = AVIROConfiguration.apikey -// -// let headers = [ -// "Content-Type": "application/json", -// "X-API-KEY": "\(AVIROConfiguration.apikey)" -// ] -// -// let config = APIDataNetworkConfig(baseURL: <#T##URL#>) -// let apiDataNetwork = NetworkService(config: <#T##any NetworkConfigurable#>) - DIContainer.shared.register( AppleAuthRepository.self, dependency: AppleAuthRepository() diff --git a/README.md b/README.md index 450b58d4..19bb083b 100644 --- a/README.md +++ b/README.md @@ -25,288 +25,3 @@ https://jeon0976.github.io/AVIRO-iOS-Document/ - Lottie - Toast-Swift - KeychainSwift -## 구조도 -``` -. -├── AVIRO.entitlements -├── Custom -│   ├── Constants -│   │   ├── Enum+.swift -│   │   ├── UIColor+Extension.swift -│   │   ├── UIFont+Extension.swift -│   │   └── UIImage+Extension.swift -│   ├── Extension -│   │   ├── Double+Extension.swift -│   │   ├── Marker+Extension.swift -│   │   ├── String+Extension.swift -│   │   ├── UIButton+Extension.swift -│   │   ├── UILabel+Extension.swift -│   │   ├── UIView+Extension.swift -│   │   └── UIViewController+Extension.swift -│   ├── SubClass -│   │   ├── UIButton -│   │   │   ├── CategoryButton.swift -│   │   │   ├── GenderButton.swift -│   │   │   ├── HomeMapReferButton.swift -│   │   │   ├── HomeTopButton.swift -│   │   │   ├── MenuPlusButton.swift -│   │   │   ├── MyPage -│   │   │   │   └── EditNickNameButton.swift -│   │   │   ├── NextPageButton.swift -│   │   │   ├── PlaceView -│   │   │   │   ├── EditInfoButton.swift -│   │   │   │   ├── ReviewWriteButton.swift -│   │   │   │   └── ShowMoreButton.swift -│   │   │   └── VeganOptionButton.swift -│   │   ├── UISegmentedControl -│   │   │   └── UnderlineSegmentedControl.swift -│   │   ├── UITextField -│   │   │   ├── EnrollField.swift -│   │   │   ├── MainField.swift -│   │   │   ├── MenuField.swift -│   │   │   ├── RegistrationField.swift -│   │   │   └── SearchField.swift -│   │   └── UITextLabel -│   │   ├── NoResultLabel.swift -│   │   ├── PlaceView -│   │   │   ├── MenuTypeLabel.swift -│   │   │   └── ReviewLabel.swift -│   │   └── TutorialTopLabel.swift -│   └── Utility -│   ├── AmplitudeUtility.swift -│   ├── LocationUtility.swift -│   ├── System.swift -│   └── TimeUtility.swift -├── Manager -│   ├── APIManager -│   │   ├── APIManagerProtocol.swift -│   │   ├── APITypes.swift -│   │   ├── AVIROManager -│   │   │   ├── AVIROAPIManager.swift -│   │   │   ├── AVIROAPIManagerProtocol.swift -│   │   │   ├── AVIRODeleteAPI.swift -│   │   │   ├── AVIROPostAPI.swift -│   │   │   └── AVIRORequestAPI.swift -│   │   ├── KakaoMapManager -│   │   │   ├── KakaoAPIManager.swift -│   │   │   ├── KakaoAPIManagerProtocol.swift -│   │   │   └── KakaoMapRequestAPI.swift -│   │   └── PublicManager -│   │   ├── PublicAPIManager.swift -│   │   ├── PublicAPIRequestComponents.swift -│   │   └── PublicXMLParserDelegate.swift -│   └── FacadeManager -│   ├── BookmarkManager.swift -│   ├── MarkerModelManager.swift -│   └── SearchHistoryManager.swift -├── Model -│   ├── APIResonseModel -│   │   ├── AVIRO -│   │   │   ├── AVIROGet -│   │   │   │   ├── CheckPlace -│   │   │   │   │   ├── AVIROCheckPlace+DTO.swift -│   │   │   │   │   └── AVIROPlaceReportCheck+DTO.swift -│   │   │   │   ├── DetailPlace -│   │   │   │   │   ├── AVIROOperationHours+DTO.swift -│   │   │   │   │   ├── AVIROPlaceInfo+DTO.swift -│   │   │   │   │   ├── AVIROPlaceMenus+DTO.swift -│   │   │   │   │   ├── AVIROPlaceReviews+DTO.swift -│   │   │   │   │   └── AVIROPlaceSummary+DTO.swift -│   │   │   │   ├── Marker -│   │   │   │   │   ├── AVIROBookmark+DTO.swift -│   │   │   │   │   └── AVIROMapMarker+DTO.swift -│   │   │   │   └── MyPage -│   │   │   │   └── AVIROMyContributionCount+DTO.swift -│   │   │   └── AVIROPost -│   │   │   ├── AVIROResult+DTO.swift -│   │   │   ├── Compare -│   │   │   │   └── AVIROMainSearchCompare+DTO.swift -│   │   │   ├── Edit -│   │   │   │   ├── AVIROEditCommonBeforeAfterDTO.swift -│   │   │   │   ├── AVIROEditLocation+DTO.swift -│   │   │   │   ├── AVIROEditMenuModel+DTO.swift -│   │   │   │   ├── AVIROEditOperationTime+DTO.swift -│   │   │   │   ├── AVIROEditPhone+DTO.swift -│   │   │   │   └── AVIROEditURL+DTO.swift -│   │   │   ├── Enroll -│   │   │   │   ├── AVIROEnrollPlace+DTO.swift -│   │   │   │   └── AVIROReview+DTO.swift -│   │   │   ├── Report -│   │   │   │   ├── AVIROReportPlace+DTO.swift -│   │   │   │   └── AVIROReportReview+DTO.swift -│   │   │   ├── Update -│   │   │   │   └── AVIROUpdateBookmark+DTO.swift -│   │   │   └── User -│   │   │   └── AVIROUser+DTO.swift -│   │   ├── KakaoMap -│   │   │   ├── KakaoAddressPlace+DTO.swift -│   │   │   ├── KakaoCoordinateSearchDTO.swift -│   │   │   ├── KakaoKeywordPlace+DTO.swift -│   │   │   └── KakaoKeywordResultDTO.swift -│   │   └── Public -│   │   └── PublicAddress+DTO.swift -│   ├── EnrollViewModel -│   │   ├── MenuModel.swift -│   │   ├── RequestTableFieldModel.swift -│   │   └── VeganTableFieldModel.swift -│   ├── HomeViewModel -│   │   ├── EditModel -│   │   │   ├── EditMenuChangedMarkerModel.swift -│   │   │   └── EditOperationHoursModel.swift -│   │   ├── HomeSearchViewModel -│   │   │   ├── HistoryTableModel.swift -│   │   │   ├── MatchedPlaceCellModel.swift -│   │   │   └── MatchedPlaceModel.swift -│   │   ├── MarkerModel.swift -│   │   ├── PlaceViewModel -│   │   │   └── PlaceTopModel.swift -│   │   └── ReportModel -│   │   └── ReportReviewModel.swift -│   ├── LocalDataModel -│   │   ├── BookmarkCache.swift -│   │   ├── MarkerModelCache.swift -│   │   └── MarkerModelLocalDB.swift -│   ├── MyPageModel -│   │   └── MyDataModel.swift -│   ├── PlaceListModel -│   │   ├── PlaceListCellModel.swift -│   │   └── PlaceListModel.swift -│   ├── SingletonModel -│   │   ├── APISingleton -│   │   │   └── KakaoAPISortingQuery.swift -│   │   ├── CoordinateSingleton -│   │   │   ├── CenterCoordinate.swift -│   │   │   └── MyCoordinate.swift -│   │   ├── MyData -│   │   │   └── MyData.swift -│   │   └── ViewLogic -│   │   └── AppController.swift -│   └── UserModel -│   └── AppleUserLoginModel.swift -├── Scene -│   ├── Presenter -│   │   ├── EnrollPlace -│   │   │   ├── EnrollPlacePresenter.swift -│   │   │   └── PlaceList -│   │   │   └── PlaceListSearchViewPresenter.swift -│   │   ├── Home -│   │   │   ├── EditPresenter -│   │   │   │   ├── ChangeableAddressPresenter -│   │   │   │   │   └── ChangeableAddressPresenter.swift -│   │   │   │   ├── EditMenuPresenter.swift -│   │   │   │   └── EditPlaceInfoPresenter.swift -│   │   │   ├── HomeSearchPresenter -│   │   │   │   └── HomeSearchPresenter.swift -│   │   │   ├── HomeViewPresenter.swift -│   │   │   └── ReportPresenter -│   │   │   └── ReportReviewPresenter.swift -│   │   ├── Login -│   │   │   ├── LoginViewPresenter.swift -│   │   │   └── RegistrationPresenter -│   │   │   ├── FirstRegistrationPresenter.swift -│   │   │   ├── SecondRegistrationPresenter.swift -│   │   │   └── ThridRegistrationPresenter.swift -│   │   └── Mypage -│   │   ├── MyPageViewPresenter.swift -│   │   └── NickNameChangeblePresenter.swift -│   └── View -│   ├── Login -│   │   ├── LoginViewController.swift -│   │   └── Registration -│   │   ├── FinalRegistrationViewController.swift -│   │   ├── FirstRegistrationViewController.swift -│   │   ├── SecondRegistrationViewController.swift -│   │   ├── TermsTableCell.swift -│   │   └── ThridRegistrationViewController.swift -│   ├── TabBar -│   │   ├── Enroll -│   │   │   ├── EnrollPlaceList -│   │   │   │   ├── PlaceListCell.swift -│   │   │   │   └── PlaceListSearchViewController.swift -│   │   │   ├── EnrollPlaceViewController.swift -│   │   │   └── SubView -│   │   │   ├── EnrollMenuTableView.swift -│   │   │   ├── EnrollStoreInfoView.swift -│   │   │   ├── EnrollVeganDetailView.swift -│   │   │   └── MenuTableView -│   │   │   ├── NormalTableViewCell.swift -│   │   │   └── RequestTableViewCell.swift -│   │   ├── Home -│   │   │   ├── Edit -│   │   │   │   ├── EditMenu -│   │   │   │   │   ├── EditMenuViewController.swift -│   │   │   │   │   └── SubView -│   │   │   │   │   ├── EditMenuBottomView.swift -│   │   │   │   │   └── EditMenuTopView.swift -│   │   │   │   └── EditPlaceInfo -│   │   │   │   ├── EditPlaceInfoSubView -│   │   │   │   │   ├── ChangeableAddressViewController -│   │   │   │   │   │   ├── ChangeableAddressViewController.swift -│   │   │   │   │   │   └── EditLocationSubView -│   │   │   │   │   │   ├── EditLocationAddressMapView.swift -│   │   │   │   │   │   ├── EditLocationAddressTextTableViewCell.swift -│   │   │   │   │   │   └── EditLocationAddressTextView.swift -│   │   │   │   │   ├── EditHomePageView.swift -│   │   │   │   │   ├── EditLocationBottomView.swift -│   │   │   │   │   ├── EditLocationTopView.swift -│   │   │   │   │   ├── EditOperatingHoursView.swift -│   │   │   │   │   ├── EditPhoneView.swift -│   │   │   │   │   └── EditoperatingHoursSubView -│   │   │   │   │   ├── EditOperatingHourView.swift -│   │   │   │   │   ├── EditOperationHourChangebleView.swift -│   │   │   │   │   └── EditTimeChangebleView.swift -│   │   │   │   └── EditPlaceInfoViewController.swift -│   │   │   ├── HomeSearch -│   │   │   │   ├── HomeSearchViewController.swift -│   │   │   │   └── SubView -│   │   │   │   ├── HeaderView -│   │   │   │   │   ├── HistoryHeaderView.swift -│   │   │   │   │   └── PlaceListHeaderView.swift -│   │   │   │   ├── HistoryTableViewCell.swift -│   │   │   │   ├── HomeSearchViewTableViewCell.swift -│   │   │   │   ├── NoHistoryLabelView.swift -│   │   │   │   └── NoHistoryView.swift -│   │   │   ├── HomeViewController.swift -│   │   │   ├── PlaceDetail -│   │   │   │   ├── PlaceView.swift -│   │   │   │   └── SubView -│   │   │   │   ├── OperationHours -│   │   │   │   │   ├── PlaceOperationHoursViewController.swift -│   │   │   │   │   └── PlaceOperationSubView -│   │   │   │   │   ├── OperationHourView.swift -│   │   │   │   │   └── OperationHoursView.swift -│   │   │   │   ├── PlaceSegmentedControlView.swift -│   │   │   │   ├── PlaceSummaryView.swift -│   │   │   │   └── SegmentedControlSubView -│   │   │   │   ├── PlaceHomeView.swift -│   │   │   │   └── SubView -│   │   │   │   ├── PlaceInfoView.swift -│   │   │   │   ├── PlaceMenuView.swift -│   │   │   │   ├── PlaceReviewWriteView.swift -│   │   │   │   ├── PlaceReviewsView.swift -│   │   │   │   ├── SubView -│   │   │   │   │   └── PushCommentView.swift -│   │   │   │   └── TableView -│   │   │   │   ├── PlaceMenuTableViewCell.swift -│   │   │   │   └── PlaceReviewTableViewCell.swift -│   │   │   ├── Report -│   │   │   │   ├── ReportCellView.swift -│   │   │   │   └── ReportReviewViewController.swift -│   │   │   └── ViewController -│   │   │   └── ChangedViewAction.swift -│   │   ├── MyPage -│   │   │   ├── MyPageViewController.swift -│   │   │   ├── NickNameChangebleView -│   │   │   │   └── NickNameChangebleViewController.swift -│   │   │   └── SubView -│   │   │   ├── MyInfoView.swift -│   │   │   ├── OtherActionsView.swift -│   │   │   └── SettingCell.swift -│   │   └── TabBarViewController.swift -│   └── Tutorial -│   ├── TutorialCell -│   │   ├── BottomCell.swift -│   │   └── TopCell.swift -│   └── TutorialViewController.swift -└── Utils -``` From 4f4c3223139961840dd65bc7b2f7cb86004ba75c Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Mon, 29 Jul 2024 14:06:39 +0900 Subject: [PATCH 35/37] =?UTF-8?q?[Feat]:=20=ED=9B=84=EA=B8=B0=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EB=94=94=EC=9E=90=EC=9D=B8=20=EC=9A=94=EC=B2=AD?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SubView/SubView/ReviewPushView.swift | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/SegmentedControlSubView/SubView/SubView/ReviewPushView.swift b/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/SegmentedControlSubView/SubView/SubView/ReviewPushView.swift index 15b4079d..d5967872 100644 --- a/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/SegmentedControlSubView/SubView/SubView/ReviewPushView.swift +++ b/AVIRO/Scene/Feature/Home/ViewController/PlaceDetailView/SubView/SegmentedControlSubView/SubView/SubView/ReviewPushView.swift @@ -17,6 +17,25 @@ final class ReviewPushView: UIView { view.backgroundColor = .gray7 + let label = UILabel() + label.text = "식당에 대한 경험과 팁을 알려주세요!" + label.font = .pretendard(size: 15, weight: .medium) + label.textColor = .gray4 + label.translatesAutoresizingMaskIntoConstraints = false + + view.addSubview(label) + + NSLayoutConstraint.activate([ + label.leadingAnchor.constraint( + equalTo: view.leadingAnchor, + constant: 16 + ), + label.centerYAnchor.constraint( + equalTo: view.centerYAnchor + ) + ]) + + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(textFieldTapped(_:))) view.addGestureRecognizer(tapGesture) From 46d191e073f4b7e82e7184ec72cd1753e7488bbe Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Mon, 29 Jul 2024 14:12:54 +0900 Subject: [PATCH 36/37] =?UTF-8?q?[Feat]:=20home=20tutorial=20page=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AVIRO.xcodeproj/project.pbxproj | 4 ++-- .../Feature/Home/ViewController/HomeViewController.swift | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index dc3e6913..83d65cf9 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -3435,7 +3435,7 @@ CODE_SIGN_ENTITLEMENTS = AVIRO/AVIRO.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = C4K2HXA435; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = AVIRO/App/Info.plist; @@ -3473,7 +3473,7 @@ CODE_SIGN_ENTITLEMENTS = AVIRO/AVIRO.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = C4K2HXA435; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = AVIRO/App/Info.plist; diff --git a/AVIRO/Scene/Feature/Home/ViewController/HomeViewController.swift b/AVIRO/Scene/Feature/Home/ViewController/HomeViewController.swift index edd4de9b..d3427be1 100644 --- a/AVIRO/Scene/Feature/Home/ViewController/HomeViewController.swift +++ b/AVIRO/Scene/Feature/Home/ViewController/HomeViewController.swift @@ -484,15 +484,15 @@ extension HomeViewController: HomeViewProtocol { presenter.categoryType = [ ("취소", false), - ("식당", false), + ("식당", true), ("카페", true), - ("술집", true), + ("술집", false), ("빵집", false) ] categoryCollectionView.reloadData() + updateSearchTextField(with: "식당") updateSearchTextField(with: "카페") - updateSearchTextField(with: "술집") view.bringSubviewToFront(blurEffectViewForTutorial) view.bringSubviewToFront(speechBubbleViewForColorExplain) From a50dbbbde97a73bc63718949e12e1d7edcebf897 Mon Sep 17 00:00:00 2001 From: Jeon0976 Date: Mon, 29 Jul 2024 14:14:49 +0900 Subject: [PATCH 37/37] [Chore]: Version Update --- AVIRO.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AVIRO.xcodeproj/project.pbxproj b/AVIRO.xcodeproj/project.pbxproj index 83d65cf9..1064a1bc 100644 --- a/AVIRO.xcodeproj/project.pbxproj +++ b/AVIRO.xcodeproj/project.pbxproj @@ -3435,7 +3435,7 @@ CODE_SIGN_ENTITLEMENTS = AVIRO/AVIRO.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = C4K2HXA435; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = AVIRO/App/Info.plist; @@ -3473,7 +3473,7 @@ CODE_SIGN_ENTITLEMENTS = AVIRO/AVIRO.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = C4K2HXA435; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = AVIRO/App/Info.plist;