From e7f4426e4be987978781ea3f0075c402ca8801bd Mon Sep 17 00:00:00 2001 From: Jakob Mygind Date: Tue, 3 Jan 2023 15:21:22 +0100 Subject: [PATCH 01/10] Make async token refresh mechanism --- Modules/Sources/APIClient/Client.swift | 18 +- Modules/Sources/APIClient/Mocks.swift | 4 +- .../APIClientLive/AuthenticationHandler.swift | 16 +- .../AuthenticationhandlerAsync.swift | 157 +++++++++++++++ .../Sources/AppFeature/AppEnvironment.swift | 4 +- .../Sources/LoginFeature/LoginViewModel.swift | 4 +- ...PITokens.swift => APITokensEnvelope.swift} | 4 +- .../Sources/PersistenceClient/Client.swift | 2 +- .../APIClientAsyncLiveTests.swift | 183 ++++++++++++++++++ .../APIClientLiveTests.swift | 6 +- 10 files changed, 369 insertions(+), 29 deletions(-) create mode 100644 Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift rename Modules/Sources/Model/{APITokens.swift => APITokensEnvelope.swift} (93%) create mode 100644 Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift diff --git a/Modules/Sources/APIClient/Client.swift b/Modules/Sources/APIClient/Client.swift index 36de75e..69d2144 100644 --- a/Modules/Sources/APIClient/Client.swift +++ b/Modules/Sources/APIClient/Client.swift @@ -13,16 +13,16 @@ import XCTestDynamicOverlay /// Interface for all network calls public struct APIClient { - public var authenticate: (Username, Password) -> AnyPublisher - public var refreshToken: (RefreshToken) -> AnyPublisher - public var setToken: (APITokens) -> Void + public var authenticate: (Username, Password) async throws -> APITokensEnvelope + public var refreshToken: (RefreshToken) async throws -> APITokensEnvelope + public var setToken: (APITokensEnvelope) -> Void public var setBaseURL: (URL) -> Void public var currentBaseURL: () -> URL public init( - authenticate: @escaping (Username, Password) -> AnyPublisher, - refreshToken: @escaping (RefreshToken) -> AnyPublisher, - setToken: @escaping (APITokens) -> Void, + authenticate: @escaping (Username, Password) async throws -> APITokensEnvelope, + refreshToken: @escaping (RefreshToken) async throws -> APITokensEnvelope, + setToken: @escaping (APITokensEnvelope) -> Void, setBaseURL: @escaping (URL) -> Void, currentBaseURL: @escaping () -> URL ) { @@ -36,9 +36,9 @@ public struct APIClient { } extension APIClient { - public static let failing = Self( - authenticate: { _, _ in .failing("\(Self.self).authenticate failing endpoint called") }, - refreshToken: { _ in .failing("\(Self.self).refreshToken failing endpoint called") }, + public static let failing = APIClient( + authenticate: XCTUnimplemented("authenticate failing endpoint called"), + refreshToken: XCTUnimplemented("\(Self.self).refreshToken failing endpoint called") , setToken: { _ in XCTFail("\(Self.self).setToken failing endpoint called") }, setBaseURL: { _ in fatalError() }, currentBaseURL: { fatalError() } diff --git a/Modules/Sources/APIClient/Mocks.swift b/Modules/Sources/APIClient/Mocks.swift index c40a248..d4e5930 100644 --- a/Modules/Sources/APIClient/Mocks.swift +++ b/Modules/Sources/APIClient/Mocks.swift @@ -11,8 +11,8 @@ import Model extension APIClient { public static let mock = Self( - authenticate: { _, _ in .init(value: .mock) }, - refreshToken: { _ in .init(value: .mock) }, + authenticate: { _, _ in .mock }, + refreshToken: { _ in .mock }, setToken: { _ in }, setBaseURL: { _ in }, currentBaseURL: { URL.init(string: ":")! } diff --git a/Modules/Sources/APIClientLive/AuthenticationHandler.swift b/Modules/Sources/APIClientLive/AuthenticationHandler.swift index cb0f6b2..16b6070 100644 --- a/Modules/Sources/APIClientLive/AuthenticationHandler.swift +++ b/Modules/Sources/APIClientLive/AuthenticationHandler.swift @@ -13,7 +13,7 @@ import Model /// The state of tokens can be monitored by subscribing to `tokenUpdatePublisher`, if this outouts nil, it means the user should log in again public class AuthenticationHandler { - public let tokenUpdatePublisher: CurrentValueSubject + public let tokenUpdatePublisher: CurrentValueSubject var now: () -> Date = Date.init var networkRequestPublisher: (URLRequest) -> AnyPublisher< @@ -22,10 +22,10 @@ public class AuthenticationHandler { URLSession.shared.dataTaskPublisher(for: $0).eraseToAnyPublisher() } private let queue = DispatchQueue(label: "Authenticator.\(UUID().uuidString)") - private(set) var refreshPublisher: PassthroughSubject? + private(set) var refreshPublisher: PassthroughSubject? private var refreshURL: URL - var apiTokens: APITokens? { + var apiTokens: APITokensEnvelope? { didSet { if let apiTokens = apiTokens { refreshPublisher?.send(apiTokens) @@ -38,7 +38,7 @@ public class AuthenticationHandler { public init( refreshURL: URL, - tokens: APITokens? + tokens: APITokensEnvelope? ) { self.apiTokens = tokens self.tokenUpdatePublisher = CurrentValueSubject(tokens) @@ -54,9 +54,9 @@ public class AuthenticationHandler { > = { URLSession.shared.dataTaskPublisher(for: $0).eraseToAnyPublisher() }, - refreshPublisher: PassthroughSubject? = nil, + refreshPublisher: PassthroughSubject? = nil, refreshURL: URL, - apiTokens: APITokens? = nil + apiTokens: APITokensEnvelope? = nil ) { self.tokenUpdatePublisher = CurrentValueSubject(apiTokens) self.now = now @@ -145,7 +145,7 @@ public class AuthenticationHandler { /// Make call to refresh access token /// - Parameter refreshToken: refreshtoken to be used /// - Returns: A fresh set of tokens - private func refreshTokens(using refreshToken: RefreshToken) -> AnyPublisher { + private func refreshTokens(using refreshToken: RefreshToken) -> AnyPublisher { struct Body: Encodable { let token: String } @@ -168,7 +168,7 @@ public class AuthenticationHandler { return $0.data } } - .decode(type: APITokens.self, decoder: decoder) + .decode(type: APITokensEnvelope.self, decoder: decoder) .eraseToAnyPublisher() } } diff --git a/Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift b/Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift new file mode 100644 index 0000000..51df476 --- /dev/null +++ b/Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift @@ -0,0 +1,157 @@ +// +// File.swift +// +// +// Created by Jakob Mygind on 14/11/2022. +// + +import Foundation +import Model + +/// This class is used to authenticate all requests, and if needed refresh the tokens +/// The state of tokens can be monitored by subscribing to `tokenUpdatePublisher`, if this outouts nil, it means the user should log in again +public actor AuthenticationHandlerAsync { + + var apiTokens: APITokensEnvelope? { + get { getTokens() } + set { saveTokens(newValue) } + } + + var refreshTask: Task? + var networkRequest: + (URLRequest) async throws -> (Data, URLResponse) = URLSession.shared.data(for: ) + var now: () -> Date = Date.init + + private var refreshURL: URL + + let getTokens: () -> APITokensEnvelope? + let saveTokens: (APITokensEnvelope?) -> Void + + public init( + refreshURL: URL, + getTokens: @escaping () -> APITokensEnvelope?, + saveTokens: @escaping (APITokensEnvelope?) -> Void, + now: @escaping () -> Date = Date.init, + networkRequest: @escaping (URLRequest) async throws -> (Data, URLResponse) = URLSession.shared.data(for: ) + ) { + self.refreshURL = refreshURL + self.getTokens = getTokens + self.saveTokens = saveTokens + self.now = now + self.networkRequest = networkRequest + } + + func validTokens() async throws -> APITokensEnvelope { + if let handle = refreshTask { + return try await handle.value + } + + guard let apiTokens else { + throw URLError(.userAuthenticationRequired) + } + + if apiTokens.token.isValid(now: now()) { + return apiTokens + } + + return try await refreshedTokens() + } + + func refreshedTokens() async throws -> APITokensEnvelope { + if let refreshTask = refreshTask { + return try await refreshTask.value + } + + let task = Task { () throws -> APITokensEnvelope in + defer { refreshTask = nil } + + guard let refreshToken = apiTokens?.refreshToken else { + throw URLError(.userAuthenticationRequired) + } + let newTokens = try await refreshTokens(using: refreshToken.token) + apiTokens = newTokens + + return newTokens + } + + self.refreshTask = task + + return try await task.value + } + + /// Authenticates URLRequests + /// - Parameter request: Requests to be authenticated + /// - Returns: The result of the request + public func performAuthenticatedRequest(_ request: URLRequest) async throws -> (Data, URLResponse) { + + let tokens = try await validTokens() + + do { + let response = try await performAuthenticatedRequest(request, accessToken: tokens.token) + if let code = (response.1 as? HTTPURLResponse)?.statusCode, + code == 401 + { + throw URLError(.userAuthenticationRequired) + } + return response + } catch let error as URLError where error.code == .userAuthenticationRequired { + let freshTokens = try await refreshTokens(using: tokens.refreshToken.token) + let response = try await performAuthenticatedRequest(request, accessToken: freshTokens.token) + return response + } + } + + /// Adds access token to request + /// throws auth error if provided token should be invalid + private func performAuthenticatedRequest( + _ request: URLRequest, + accessToken: AccessToken + ) async throws -> (Data, URLResponse) { + var request = request + request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization") + + return try await networkRequest(request) + } + + /// Make call to refresh access token + /// - Parameter refreshToken: refreshtoken to be used + /// - Returns: A fresh set of tokens + private func refreshTokens(using refreshToken: RefreshToken) async throws -> APITokensEnvelope { + struct Body: Encodable { + let token: String + } + + let decoder = JSONDecoder() + + let formatter = DateFormatter() + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ" + decoder.dateDecodingStrategy = .formatted(formatter) + + var request = URLRequest(url: refreshURL) + request.httpMethod = "POST" + request.httpBody = try JSONEncoder().encode(Body(token: refreshToken.rawValue)) + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + let response = try await networkRequest(request) + if let code = (response.1 as? HTTPURLResponse)?.statusCode, + code == 401 + { + self.apiTokens = nil + throw URLError(.userAuthenticationRequired) + } + + return try decoder.decode(APITokensEnvelope.self, from: response.0) + } +} + +//#if !RELEASE +//extension AccessToken { +// /// A token with expiry some time in December afair +// public static let expired = AccessToken( +// rawValue: +// "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMyIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjM5NTg0OTUyLCJleHAiOjE2Mzk1ODYxNTIsImlhdCI6MTYzOTU4NDk1Mn0.X2w58Hk8Wtct3-PHYqPLGmCsUgrPuLcp9-hw98E4ZCM" +// ) +//} +//#endif + diff --git a/Modules/Sources/AppFeature/AppEnvironment.swift b/Modules/Sources/AppFeature/AppEnvironment.swift index 36341e0..a47beaf 100644 --- a/Modules/Sources/AppFeature/AppEnvironment.swift +++ b/Modules/Sources/AppFeature/AppEnvironment.swift @@ -25,7 +25,7 @@ public struct AppEnvironment { var localizations: ObservableLocalizations var appVersion: AppVersion var persistenceClient: PersistenceClient - var tokenUpdatePublisher: AnyPublisher + var tokenUpdatePublisher: AnyPublisher var networkMonitor: NetworkClient public init( @@ -36,7 +36,7 @@ public struct AppEnvironment { localizations: ObservableLocalizations, appVersion: AppVersion, persistenceClient: PersistenceClient, - tokenUpdatePublisher: AnyPublisher, + tokenUpdatePublisher: AnyPublisher, networkMonitor: NetworkClient ) { self.mainQueue = mainQueue diff --git a/Modules/Sources/LoginFeature/LoginViewModel.swift b/Modules/Sources/LoginFeature/LoginViewModel.swift index 3878750..a4702a1 100644 --- a/Modules/Sources/LoginFeature/LoginViewModel.swift +++ b/Modules/Sources/LoginFeature/LoginViewModel.swift @@ -13,7 +13,7 @@ import Style public class LoginViewModel: ObservableObject { var environment: LoginEnvironment - var onSuccess: (APITokens, Username) -> Void + var onSuccess: (APITokensEnvelope, Username) -> Void enum Route { case alert(AlertState) @@ -29,7 +29,7 @@ public class LoginViewModel: ObservableObject { var cancellables: Set = [] public init( - onSuccess: @escaping (APITokens, Username) -> Void, + onSuccess: @escaping (APITokensEnvelope, Username) -> Void, environment: LoginEnvironment ) { self.environment = environment diff --git a/Modules/Sources/Model/APITokens.swift b/Modules/Sources/Model/APITokensEnvelope.swift similarity index 93% rename from Modules/Sources/Model/APITokens.swift rename to Modules/Sources/Model/APITokensEnvelope.swift index 1bd6eac..78b8ff8 100644 --- a/Modules/Sources/Model/APITokens.swift +++ b/Modules/Sources/Model/APITokensEnvelope.swift @@ -24,7 +24,7 @@ public struct RefreshTokenEnvelope: Codable, Equatable { public var expiresAt: Date } -public struct APITokens: Codable, Equatable { +public struct APITokensEnvelope: Codable, Equatable { init( token: AccessToken, refreshToken: RefreshTokenEnvelope @@ -37,7 +37,7 @@ public struct APITokens: Codable, Equatable { public var refreshToken: RefreshTokenEnvelope } -extension APITokens { +extension APITokensEnvelope { public static let mock = Self( token: "MockToken", refreshToken: .init(token: "MockRefreshToken", expiresAt: .distantFuture)) diff --git a/Modules/Sources/PersistenceClient/Client.swift b/Modules/Sources/PersistenceClient/Client.swift index 829683a..89d73a4 100644 --- a/Modules/Sources/PersistenceClient/Client.swift +++ b/Modules/Sources/PersistenceClient/Client.swift @@ -10,6 +10,6 @@ import Model /// Client used for storing data public struct PersistenceClient { - public var tokens: FileClient + public var tokens: FileClient public var email: FileClient } diff --git a/Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift b/Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift new file mode 100644 index 0000000..a398a91 --- /dev/null +++ b/Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift @@ -0,0 +1,183 @@ +import Combine +import Foundation +import XCTest + +// +// File.swift +// +// +// Created by Jakob Mygind on 20/01/2022. +// +@testable import APIClientLive +@testable import Model + +final class APIClientAsyncLiveTests: XCTestCase { + + var formatter: DateFormatter = { + let formatter = DateFormatter() + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ" + return formatter + }() + + let tokenSuccessResponseData = """ + { + "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiOSIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjQyNjgxMzU1LCJleHAiOjE2NDI2ODI1NTUsImlhdCI6MTY0MjY4MTM1NX0.TUt15w5BOJfeekhM4TY0qdCHNlr4qtDIVdh_S6MzwTI", + "refreshToken": { + "token": "6/IOyrlaxkYSI/hqVrDFgzn2tefXfKrVNQJvEIJ32gMhDDNAkmDMYiNogS4LvdS3r3CLuRqbiWWNLcTby3i9xg==", + "expiresAt": "2022-04-20T12:22:35.3876411Z" + } + } + """.data(using: .utf8)! + + lazy var newTokens = APITokensEnvelope( + token: .init( + rawValue: + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiOSIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjQyNjgxMzU1LCJleHAiOjE2NDI2ODI1NTUsImlhdCI6MTY0MjY4MTM1NX0.TUt15w5BOJfeekhM4TY0qdCHNlr4qtDIVdh_S6MzwTI" + ), + refreshToken: .init( + token: .init( + rawValue: + "6/IOyrlaxkYSI/hqVrDFgzn2tefXfKrVNQJvEIJ32gMhDDNAkmDMYiNogS4LvdS3r3CLuRqbiWWNLcTby3i9xg==" + ), + expiresAt: formatter.date(from: "2022-04-20T12:22:35.3876411Z")! + ) + ) + + let apiCallSuccessData = "Success".data(using: .utf8)! + + @available(iOS 16.0, *) + @MainActor + func test_refreshing_expired_token() async throws { + let successResponse = HTTPURLResponse( + url: URL(string: ":")!, statusCode: 200, httpVersion: nil, headerFields: nil)! + let now = Date.distantFuture + var tokens: APITokensEnvelope? = APITokensEnvelope.mock + + tokens?.token = .expired + + let apiURLRequest: URLRequest = URLRequest(url: URL(string: ":")!) + let refreshURL = URL(string: "refresh://")! + + var continuation: CheckedContinuation<(Data, URLResponse), Error>! + + var requestsMade: [URLRequest] = [] + let authHandler = AuthenticationHandlerAsync( + refreshURL: refreshURL, + getTokens: { tokens }, + saveTokens: { tokens = $0 }, + now: { now }, + networkRequest: { urlRequest in + requestsMade.append(urlRequest) + return try await withCheckedThrowingContinuation({ cont in + continuation = cont + }) + }) + + var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] + + var task = await authHandler.refreshTask + XCTAssertNil(task) // Not yet refreshing + Task { + do { + valuesReceived.append(try await authHandler.performAuthenticatedRequest(apiURLRequest)) // Make the api call + } catch { + XCTFail() + } + } + + await Task.yield() + task = await authHandler.refreshTask + XCTAssertNotNil(task) // Refresh started + XCTAssertEqual(requestsMade.count, 1) + XCTAssertEqual(requestsMade.first?.url, refreshURL) // Refreash call was made + continuation.resume(returning: (tokenSuccessResponseData, successResponse)) + + try await Task.sleep(for: .milliseconds(1)) + task = await authHandler.refreshTask + XCTAssertNil(task) // Refresh ended + + let refreshedTokens = await authHandler.apiTokens + XCTAssertEqual(refreshedTokens, newTokens) // We now have new tokens + continuation.resume(returning: (apiCallSuccessData, successResponse)) // Now original api call is made and for convenience we just send the same data again + try await Task.sleep(for: .milliseconds(1)) + + task = await authHandler.refreshTask + XCTAssertNil(task) // Refresh was terminated + XCTAssertEqual(valuesReceived.count, 1) + let result = try XCTUnwrap(valuesReceived.first) + XCTAssertEqual(result.data, apiCallSuccessData) // Original api call successfully returned some data + } + + @available(iOS 16.0, *) + @MainActor + func test_refreshing_expired_token_while_multiple_calls_made() async throws { + let successResponse = HTTPURLResponse( + url: URL(string: ":")!, statusCode: 200, httpVersion: nil, headerFields: nil)! + let now = Date.distantFuture + var tokens: APITokensEnvelope? = APITokensEnvelope.mock + + tokens?.token = .expired + + let apiURLRequest: URLRequest = URLRequest(url: URL(string: ":")!) + let refreshURL = URL(string: "refresh://")! + + var continuations: [CheckedContinuation<(Data, URLResponse), Error>] = [] + + var requestsMade: [URLRequest] = [] + let authHandler = AuthenticationHandlerAsync( + refreshURL: refreshURL, + getTokens: { tokens }, + saveTokens: { tokens = $0 }, + now: { now }, + networkRequest: { urlRequest in + requestsMade.append(urlRequest) + return try await withCheckedThrowingContinuation({ cont in + continuations.append(cont) + }) + }) + + var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] + + var task = await authHandler.refreshTask + XCTAssertNil(task) // Not yet refreshing + + for _ in 0..<3 { + Task { + do { + valuesReceived.append(try await authHandler.performAuthenticatedRequest(apiURLRequest)) // Make the api call + } catch { + XCTFail() + } + } + } + + await Task.yield() + task = await authHandler.refreshTask + XCTAssertNotNil(task) // Refresh started + XCTAssertEqual(requestsMade.count, 1) + XCTAssertEqual(requestsMade.first?.url, refreshURL) // Refreash call was made + (try XCTUnwrap(continuations.removeFirst())).resume(returning: (tokenSuccessResponseData, successResponse)) + + try await Task.sleep(for: .milliseconds(1)) + task = await authHandler.refreshTask + XCTAssertNil(task) // Refresh ended + XCTAssertEqual(continuations.count, 3) + let refreshedTokens = await authHandler.apiTokens + XCTAssertEqual(refreshedTokens, newTokens) // We now have new tokens + try await Task.sleep(for: .milliseconds(1)) + continuations.forEach { + $0.resume(returning: (apiCallSuccessData, successResponse)) + } + + try await Task.sleep(for: .milliseconds(1)) + + task = await authHandler.refreshTask + XCTAssertNil(task) // Refresh was terminated + XCTAssertEqual(valuesReceived.count, 3) + let result = try XCTUnwrap(valuesReceived.first) + XCTAssertEqual(result.data, apiCallSuccessData) // Original api call successfully returned some data + } + +} + diff --git a/Modules/Tests/APIClientLiveTests/APIClientLiveTests.swift b/Modules/Tests/APIClientLiveTests/APIClientLiveTests.swift index a224854..3dd7f57 100644 --- a/Modules/Tests/APIClientLiveTests/APIClientLiveTests.swift +++ b/Modules/Tests/APIClientLiveTests/APIClientLiveTests.swift @@ -30,7 +30,7 @@ final class APIClientLiveTests: XCTestCase { } """.data(using: .utf8)! - lazy var newTokens = APITokens( + lazy var newTokens = APITokensEnvelope( token: .init( rawValue: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiOSIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjQyNjgxMzU1LCJleHAiOjE2NDI2ODI1NTUsImlhdCI6MTY0MjY4MTM1NX0.TUt15w5BOJfeekhM4TY0qdCHNlr4qtDIVdh_S6MzwTI" @@ -50,7 +50,7 @@ final class APIClientLiveTests: XCTestCase { let successResponse = HTTPURLResponse( url: URL(string: ":")!, statusCode: 200, httpVersion: nil, headerFields: nil)! let now = Date.distantFuture - var tokens = APITokens.mock + var tokens = APITokensEnvelope.mock tokens.token = .expired let networkPublisherSubject = PassthroughSubject< @@ -102,7 +102,7 @@ final class APIClientLiveTests: XCTestCase { let successResponse = HTTPURLResponse( url: URL(string: ":")!, statusCode: 200, httpVersion: nil, headerFields: nil)! let now = Date.distantFuture - var tokens = APITokens.mock + var tokens = APITokensEnvelope.mock tokens.token = .expired let networkPublisherSubject = PassthroughSubject< From 1a3c563f43875cbcfdb05169640cfac8e075f8f9 Mon Sep 17 00:00:00 2001 From: Jakob Mygind Date: Tue, 10 Jan 2023 15:16:47 +0100 Subject: [PATCH 02/10] feat: Added tests for failing requests --- .../APIClientLive/AuthenticationHandler.swift | 5 + .../AuthenticationhandlerAsync.swift | 99 ++++---- .../APIClientAsyncLiveTests.swift | 212 +++++++++++++++--- 3 files changed, 232 insertions(+), 84 deletions(-) diff --git a/Modules/Sources/APIClientLive/AuthenticationHandler.swift b/Modules/Sources/APIClientLive/AuthenticationHandler.swift index 16b6070..348491a 100644 --- a/Modules/Sources/APIClientLive/AuthenticationHandler.swift +++ b/Modules/Sources/APIClientLive/AuthenticationHandler.swift @@ -180,5 +180,10 @@ public class AuthenticationHandler { rawValue: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMyIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjM5NTg0OTUyLCJleHAiOjE2Mzk1ODYxNTIsImlhdCI6MTYzOTU4NDk1Mn0.X2w58Hk8Wtct3-PHYqPLGmCsUgrPuLcp9-hw98E4ZCM" ) + + public static let expires06142256 = AccessToken( + rawValue: + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMyIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjo5MDM5NTg0OTUyLCJleHAiOjkwMzk1ODQ5NTIsImlhdCI6OTAzOTU4NDk1Mn0.NUkAhQu3Enh-S02ktYWA97OVkp3skSkLcYXFEEpHCfw" + ) } #endif diff --git a/Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift b/Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift index 51df476..0c18b1d 100644 --- a/Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift +++ b/Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift @@ -63,12 +63,12 @@ public actor AuthenticationHandlerAsync { } let task = Task { () throws -> APITokensEnvelope in - defer { refreshTask = nil } + defer { self.refreshTask = nil } guard let refreshToken = apiTokens?.refreshToken else { throw URLError(.userAuthenticationRequired) } - let newTokens = try await refreshTokens(using: refreshToken.token) + let newTokens = try await AuthenticationHandlerAsync.refreshTokens(using: refreshToken.token, refreshURL: refreshURL, networkRequest: networkRequest) apiTokens = newTokens return newTokens @@ -79,44 +79,14 @@ public actor AuthenticationHandlerAsync { return try await task.value } - /// Authenticates URLRequests - /// - Parameter request: Requests to be authenticated - /// - Returns: The result of the request - public func performAuthenticatedRequest(_ request: URLRequest) async throws -> (Data, URLResponse) { - - let tokens = try await validTokens() - - do { - let response = try await performAuthenticatedRequest(request, accessToken: tokens.token) - if let code = (response.1 as? HTTPURLResponse)?.statusCode, - code == 401 - { - throw URLError(.userAuthenticationRequired) - } - return response - } catch let error as URLError where error.code == .userAuthenticationRequired { - let freshTokens = try await refreshTokens(using: tokens.refreshToken.token) - let response = try await performAuthenticatedRequest(request, accessToken: freshTokens.token) - return response - } - } - - /// Adds access token to request - /// throws auth error if provided token should be invalid - private func performAuthenticatedRequest( - _ request: URLRequest, - accessToken: AccessToken - ) async throws -> (Data, URLResponse) { - var request = request - request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization") - - return try await networkRequest(request) - } - /// Make call to refresh access token /// - Parameter refreshToken: refreshtoken to be used /// - Returns: A fresh set of tokens - private func refreshTokens(using refreshToken: RefreshToken) async throws -> APITokensEnvelope { + private static func refreshTokens( + using refreshToken: RefreshToken, + refreshURL: URL, + networkRequest: (URLRequest) async throws -> (Data, URLResponse) + ) async throws -> APITokensEnvelope { struct Body: Encodable { let token: String } @@ -134,24 +104,51 @@ public actor AuthenticationHandlerAsync { request.setValue("application/json", forHTTPHeaderField: "Content-Type") let response = try await networkRequest(request) + print("✈️ResponseData: \(String(data: response.0, encoding: .utf8)!)") if let code = (response.1 as? HTTPURLResponse)?.statusCode, - code == 401 - { - self.apiTokens = nil + code == 401 { throw URLError(.userAuthenticationRequired) } return try decoder.decode(APITokensEnvelope.self, from: response.0) } + + /// Authenticates URLRequests + /// - Parameter request: Requests to be authenticated + /// - Returns: The result of the request + public func performAuthenticatedRequest(_ request: URLRequest) async throws -> (Data, URLResponse) { + + do { + let tokens = try await validTokens() + + do { + let response = try await performAuthenticatedRequest(request, accessToken: tokens.token) + if + let code = (response.1 as? HTTPURLResponse)?.statusCode, + code == 401 { + throw URLError(.userAuthenticationRequired) + } + return response + } catch let error as URLError where error.code == .userAuthenticationRequired { + let freshTokens = try await refreshedTokens() + let response = try await performAuthenticatedRequest(request, accessToken: freshTokens.token) + return response + } + } catch { + apiTokens = nil + throw error + } + } + + /// Adds access token to request + /// throws auth error if provided token should be invalid + private func performAuthenticatedRequest( + _ request: URLRequest, + accessToken: AccessToken + ) async throws -> (Data, URLResponse) { + var request = request + request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization") + + return try await networkRequest(request) + } } - -//#if !RELEASE -//extension AccessToken { -// /// A token with expiry some time in December afair -// public static let expired = AccessToken( -// rawValue: -// "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMyIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjM5NTg0OTUyLCJleHAiOjE2Mzk1ODYxNTIsImlhdCI6MTYzOTU4NDk1Mn0.X2w58Hk8Wtct3-PHYqPLGmCsUgrPuLcp9-hw98E4ZCM" -// ) -//} -//#endif - diff --git a/Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift b/Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift index a398a91..7d7e5e3 100644 --- a/Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift +++ b/Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift @@ -12,24 +12,20 @@ import XCTest @testable import Model final class APIClientAsyncLiveTests: XCTestCase { - + var formatter: DateFormatter = { let formatter = DateFormatter() formatter.locale = Locale(identifier: "en_US_POSIX") formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ" return formatter }() - - let tokenSuccessResponseData = """ - { - "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiOSIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjQyNjgxMzU1LCJleHAiOjE2NDI2ODI1NTUsImlhdCI6MTY0MjY4MTM1NX0.TUt15w5BOJfeekhM4TY0qdCHNlr4qtDIVdh_S6MzwTI", - "refreshToken": { - "token": "6/IOyrlaxkYSI/hqVrDFgzn2tefXfKrVNQJvEIJ32gMhDDNAkmDMYiNogS4LvdS3r3CLuRqbiWWNLcTby3i9xg==", - "expiresAt": "2022-04-20T12:22:35.3876411Z" - } - } - """.data(using: .utf8)! - + + var tokenSuccessResponseData: Data { + let encoder = JSONEncoder() + encoder.dateEncodingStrategy = .formatted(formatter) + return try! encoder.encode(newTokens) + } + lazy var newTokens = APITokensEnvelope( token: .init( rawValue: @@ -45,7 +41,7 @@ final class APIClientAsyncLiveTests: XCTestCase { ) let apiCallSuccessData = "Success".data(using: .utf8)! - + @available(iOS 16.0, *) @MainActor func test_refreshing_expired_token() async throws { @@ -53,9 +49,9 @@ final class APIClientAsyncLiveTests: XCTestCase { url: URL(string: ":")!, statusCode: 200, httpVersion: nil, headerFields: nil)! let now = Date.distantFuture var tokens: APITokensEnvelope? = APITokensEnvelope.mock - + tokens?.token = .expired - + let apiURLRequest: URLRequest = URLRequest(url: URL(string: ":")!) let refreshURL = URL(string: "refresh://")! @@ -73,9 +69,9 @@ final class APIClientAsyncLiveTests: XCTestCase { continuation = cont }) }) - + var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] - + var task = await authHandler.refreshTask XCTAssertNil(task) // Not yet refreshing Task { @@ -85,14 +81,14 @@ final class APIClientAsyncLiveTests: XCTestCase { XCTFail() } } - + await Task.yield() task = await authHandler.refreshTask XCTAssertNotNil(task) // Refresh started XCTAssertEqual(requestsMade.count, 1) XCTAssertEqual(requestsMade.first?.url, refreshURL) // Refreash call was made continuation.resume(returning: (tokenSuccessResponseData, successResponse)) - + try await Task.sleep(for: .milliseconds(1)) task = await authHandler.refreshTask XCTAssertNil(task) // Refresh ended @@ -101,24 +97,23 @@ final class APIClientAsyncLiveTests: XCTestCase { XCTAssertEqual(refreshedTokens, newTokens) // We now have new tokens continuation.resume(returning: (apiCallSuccessData, successResponse)) // Now original api call is made and for convenience we just send the same data again try await Task.sleep(for: .milliseconds(1)) - + task = await authHandler.refreshTask XCTAssertNil(task) // Refresh was terminated XCTAssertEqual(valuesReceived.count, 1) let result = try XCTUnwrap(valuesReceived.first) XCTAssertEqual(result.data, apiCallSuccessData) // Original api call successfully returned some data } - + @available(iOS 16.0, *) @MainActor func test_refreshing_expired_token_while_multiple_calls_made() async throws { - let successResponse = HTTPURLResponse( - url: URL(string: ":")!, statusCode: 200, httpVersion: nil, headerFields: nil)! + let now = Date.distantFuture var tokens: APITokensEnvelope? = APITokensEnvelope.mock - + tokens?.token = .expired - + let apiURLRequest: URLRequest = URLRequest(url: URL(string: ":")!) let refreshURL = URL(string: "refresh://")! @@ -136,9 +131,9 @@ final class APIClientAsyncLiveTests: XCTestCase { continuations.append(cont) }) }) - + var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] - + var task = await authHandler.refreshTask XCTAssertNil(task) // Not yet refreshing @@ -151,14 +146,14 @@ final class APIClientAsyncLiveTests: XCTestCase { } } } - + await Task.yield() task = await authHandler.refreshTask XCTAssertNotNil(task) // Refresh started XCTAssertEqual(requestsMade.count, 1) XCTAssertEqual(requestsMade.first?.url, refreshURL) // Refreash call was made - (try XCTUnwrap(continuations.removeFirst())).resume(returning: (tokenSuccessResponseData, successResponse)) - + (try XCTUnwrap(continuations.removeFirst())).resume(returning: (tokenSuccessResponseData, .success)) + try await Task.sleep(for: .milliseconds(1)) task = await authHandler.refreshTask XCTAssertNil(task) // Refresh ended @@ -167,17 +162,168 @@ final class APIClientAsyncLiveTests: XCTestCase { XCTAssertEqual(refreshedTokens, newTokens) // We now have new tokens try await Task.sleep(for: .milliseconds(1)) continuations.forEach { - $0.resume(returning: (apiCallSuccessData, successResponse)) + $0.resume(returning: (apiCallSuccessData, .success)) } - + try await Task.sleep(for: .milliseconds(1)) - + task = await authHandler.refreshTask XCTAssertNil(task) // Refresh was terminated XCTAssertEqual(valuesReceived.count, 3) let result = try XCTUnwrap(valuesReceived.first) XCTAssertEqual(result.data, apiCallSuccessData) // Original api call successfully returned some data } + + @available(iOS 16.0, *) + @MainActor + func test_api_call_fails_with_non_expired_token_but_refresh_succeeds_while_multiple_calls_made() async throws { + + let now = Date.distantPast + var tokens: APITokensEnvelope? = APITokensEnvelope.mock + + tokens?.token = .expires06142256 + + let apiURLRequest: URLRequest = URLRequest(url: URL(string: "apiCall://")!) + let refreshURL = URL(string: "refresh://")! + + var requestsAndContinuations: [(request: URLRequest, continuation: CheckedContinuation<(Data, URLResponse), Error>)] = [] + let authHandler = AuthenticationHandlerAsync( + refreshURL: refreshURL, + getTokens: { tokens }, + saveTokens: { + tokens = $0 + }, + now: { now }, + networkRequest: { urlRequest in + return try await withCheckedThrowingContinuation({ cont in + requestsAndContinuations.append((urlRequest, cont)) + }) + }) + + var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] + + var task = await authHandler.refreshTask + XCTAssertNil(task) // Not yet refreshing + + // Make 3 simultaneous api calls + for _ in 0..<3 { + Task { + do { + valuesReceived.append(try await authHandler.performAuthenticatedRequest(apiURLRequest)) // Make the api call + } catch { + XCTFail("\(error.localizedDescription)") + } + } + } + + await Task.yield() + + let firstRequest = requestsAndContinuations.removeFirst() + XCTAssertEqual(firstRequest.request.url, URL(string: "apiCall://")!) + (try XCTUnwrap(firstRequest.continuation)).resume(returning: (Data(), .tokenExpired)) + + try await Task.sleep(for: .milliseconds(1)) + task = await authHandler.refreshTask + XCTAssertNotNil(task) // Refresh started + XCTAssertEqual(requestsAndContinuations.count, 3) + + // Find apicall made corresponding to the refreshCall + let refreshCalls = requestsAndContinuations.filter { $0.request.url == URL(string: "refresh://")! } + XCTAssertEqual(refreshCalls.count, 1) + let refreshIndex = try XCTUnwrap(requestsAndContinuations.firstIndex(where: { $0.request.url == URL(string: "refresh://")!})) + let refreshContinuation = requestsAndContinuations.remove(at: refreshIndex).continuation + + (try XCTUnwrap(refreshContinuation)).resume(returning: (tokenSuccessResponseData, .success)) + + try await Task.sleep(for: .milliseconds(1)) + task = await authHandler.refreshTask + XCTAssertNil(task) // Refresh was terminated + let refreshedTokens = await authHandler.apiTokens + XCTAssertEqual(refreshedTokens, newTokens) // We now have new tokens + XCTAssertEqual(requestsAndContinuations.count, 3) + requestsAndContinuations.forEach { + $0.continuation.resume(returning: (apiCallSuccessData, .success)) + } + try await Task.sleep(for: .milliseconds(1)) + XCTAssertEqual(valuesReceived.count, 3) + let result = try XCTUnwrap(valuesReceived[1]) + XCTAssertEqual(result.data, apiCallSuccessData) // Original api calls successfully returned some data + } + + @available(iOS 16.0, *) + @MainActor + func test_refreshing_expired_token_fail_while_multiple_calls_made() async throws { + + let now = Date.distantFuture + var tokens: APITokensEnvelope? = APITokensEnvelope.mock + + tokens?.token = .expired + + let apiURLRequest: URLRequest = URLRequest(url: URL(string: ":")!) + let refreshURL = URL(string: "refresh://")! + + var continuations: [CheckedContinuation<(Data, URLResponse), Error>] = [] + + var requestsMade: [URLRequest] = [] + let authHandler = AuthenticationHandlerAsync( + refreshURL: refreshURL, + getTokens: { tokens }, + saveTokens: { tokens = $0 }, + now: { now }, + networkRequest: { urlRequest in + requestsMade.append(urlRequest) + return try await withCheckedThrowingContinuation({ cont in + continuations.append(cont) + }) + }) + + var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] + + var task = await authHandler.refreshTask + XCTAssertNil(task) // Not yet refreshing + + let workCount = 3 + var failedRequests = 0 + + for _ in 0.. Date: Wed, 1 Feb 2023 15:21:10 +0100 Subject: [PATCH 03/10] fix. Use swift-dependencies for handling dependencies --- App/APITokensProtocolConformance.swift | 20 + App/AppDelegate.swift | 76 +- App/EnvVars.swift | 58 + App/Info.plist | 4 +- App/LiveDependencies.swift | 75 ++ App/ProjectConfig.swift | 2 +- App/{Test.xcconfig => Staging.xcconfig} | 2 +- .../xcschemes/TokenHandler.xcscheme | 77 ++ Modules/Package.swift | 40 +- Modules/Sources/APIClient/Client.swift | 20 +- Modules/Sources/APIClient/DependencyKey.swift | 23 + Modules/Sources/APIClient/Mocks.swift | 5 +- .../APIClientLive/AuthenticationHandler.swift | 189 --- Modules/Sources/APIClientLive/Client.swift | 39 +- .../APIClientLive/RequestBuilders.swift | 9 +- .../Sources/AppFeature/AppEnvironment.swift | 84 -- Modules/Sources/AppFeature/AppView.swift | 72 +- Modules/Sources/AppFeature/AppViewModel.swift | 51 +- .../Sources/AppVersion/DependencyKey.swift | 22 + Modules/Sources/AppVersion/Version.swift | 31 +- .../Sources/Localizations/DependencyKey.swift | 22 + .../Sources/Localizations/Localizations.swift | 1064 ++++++++--------- .../Localizations/NStackAccessor.swift | 8 +- .../ObservableLocalizations.swift | 4 + .../LoginFeature/DeveloperScreen.swift | 5 +- .../LoginFeature/LoginEnvironment.swift | 37 - Modules/Sources/LoginFeature/LoginView.swift | 16 +- .../Sources/LoginFeature/LoginViewModel.swift | 83 +- Modules/Sources/MainFeature/MainView.swift | 3 +- .../Sources/MainFeature/MainViewModel.swift | 14 +- Modules/Sources/Model/APITokensEnvelope.swift | 12 - Modules/Sources/NetworkClient/Client.swift | 6 +- .../Sources/NetworkClient/DependencyKey.swift | 16 + Modules/Sources/NetworkClient/Live.swift | 2 +- .../Sources/PersistenceClient/Client.swift | 14 + .../APITokensEnvelopeProtocol.swift | 25 + .../AuthenticationhandlerAsync.swift | 36 +- .../Sources/{Model => TokenHandler}/JWT.swift | 11 +- Modules/Tests/TokenHandlerTests/Models.swift | 48 + .../TokenHandlerTests.swift} | 25 +- .../AppVersion.modulemap | 4 - .../Model.modulemap | 4 - .../NetworkClient.modulemap | 4 - .../PrinterClient-Swift.h | 212 ---- .../PrinterClient.modulemap | 4 - .../SoundClient.modulemap | 4 - .../TouchInterceptorClient.modulemap | 4 - .../AppVersion.build/AppVersion.modulemap | 4 - .../Model.build/Model.modulemap | 4 - .../arm64/Model-OutputFileMap.json | 1 - .../arm64/Model-master.swiftdeps | 17 - .../Objects-normal/arm64/Model.LinkFileList | 12 - .../Objects-normal/arm64/Model.SwiftFileList | 12 - .../empty-Modules_Localizations.plist | 5 - .../empty-Modules_SoundClient.plist | 5 - .../assetcatalog_dependencies | Bin 488 -> 0 bytes .../assetcatalog_generated_info.plist | 5 - .../empty-Modules_Style.plist | 5 - .../NetworkClient.modulemap | 4 - .../arm64/NetworkClient-OutputFileMap.json | 1 - .../arm64/NetworkClient-master.d | 6 - .../arm64/NetworkClient-master.dia | Bin 412 -> 0 bytes .../arm64/NetworkClient-master.swiftdeps | 7 - .../arm64/NetworkClient.LinkFileList | 2 - .../arm64/NetworkClient.SwiftFileList | 2 - .../Objects-normal/arm64/Client.o | Bin 94760 -> 0 bytes .../arm64/PrinterClient-OutputFileMap.json | 1 - .../arm64/PrinterClient-Swift.h | 212 ---- .../arm64/PrinterClient-master.d | 5 - .../arm64/PrinterClient-master.dia | Bin 220 -> 0 bytes .../arm64/PrinterClient-master.swiftdeps | 6 - .../arm64/PrinterClient.LinkFileList | 1 - .../arm64/PrinterClient.SwiftFileList | 1 - .../arm64/PrinterClient.swiftdoc | Bin 576 -> 0 bytes .../arm64/PrinterClient.swiftmodule | Bin 41012 -> 0 bytes .../arm64/PrinterClient.swiftsourceinfo | Bin 6452 -> 0 bytes .../arm64/PrinterClient_dependency_info.dat | Bin 623 -> 0 bytes .../PrinterClient.modulemap | 4 - .../resource_bundle_accessor.swift | 29 - .../arm64/SoundClient-OutputFileMap.json | 1 - .../arm64/SoundClient-master.swiftdeps | 8 - .../arm64/SoundClient.LinkFileList | 2 - .../arm64/SoundClient.SwiftFileList | 2 - .../SoundClient.build/SoundClient.modulemap | 4 - .../TouchInterceptorClient-OutputFileMap.json | 1 - .../TouchInterceptorClient-master.swiftdeps | 6 - .../arm64/TouchInterceptorClient.LinkFileList | 1 - .../TouchInterceptorClient.SwiftFileList | 1 - .../TouchInterceptorClient.modulemap | 4 - .../Modules_Localizations.bundle/Info.plist | Bin 686 -> 0 bytes .../Localizations_da-DK.json | 185 --- .../Modules_SoundClient.bundle/Info.plist | Bin 682 -> 0 bytes .../Modules_SoundClient.bundle/NewOrder.mp3 | Bin 414513 -> 0 bytes .../Modules_Style.bundle/Assets.car | Bin 56880 -> 0 bytes .../Modules_Style.bundle/KelptA3-Bold.otf | Bin 37192 -> 0 bytes .../KelptA3-ExtraLight.otf | Bin 35772 -> 0 bytes .../Modules_Style.bundle/KelptA3-Light.otf | Bin 35964 -> 0 bytes .../Modules_Style.bundle/KelptA3-Medium.otf | Bin 36100 -> 0 bytes .../Modules_Style.bundle/KelptA3-Regular.otf | Bin 36300 -> 0 bytes .../build/Release-iphoneos/PrinterClient.o | Bin 79519 -> 0 bytes .../Project/arm64-apple-ios.swiftsourceinfo | Bin 6452 -> 0 bytes .../Project/arm64.swiftsourceinfo | Bin 6452 -> 0 bytes .../arm64-apple-ios.swiftdoc | Bin 576 -> 0 bytes .../arm64-apple-ios.swiftmodule | Bin 41012 -> 0 bytes .../PrinterClient.swiftmodule/arm64.swiftdoc | Bin 576 -> 0 bytes .../arm64.swiftmodule | Bin 41012 -> 0 bytes PROJECT_NAME.xcodeproj/project.pbxproj | 26 +- .../xcshareddata/swiftpm/Package.resolved | 195 +-- .../xcschemes/PROJECT_NAME.xcscheme | 30 - 109 files changed, 1321 insertions(+), 2082 deletions(-) create mode 100644 App/APITokensProtocolConformance.swift create mode 100644 App/EnvVars.swift create mode 100644 App/LiveDependencies.swift rename App/{Test.xcconfig => Staging.xcconfig} (61%) create mode 100644 Modules/.swiftpm/xcode/xcshareddata/xcschemes/TokenHandler.xcscheme create mode 100644 Modules/Sources/APIClient/DependencyKey.swift delete mode 100644 Modules/Sources/APIClientLive/AuthenticationHandler.swift delete mode 100644 Modules/Sources/AppFeature/AppEnvironment.swift create mode 100644 Modules/Sources/AppVersion/DependencyKey.swift create mode 100644 Modules/Sources/Localizations/DependencyKey.swift delete mode 100644 Modules/Sources/LoginFeature/LoginEnvironment.swift create mode 100644 Modules/Sources/NetworkClient/DependencyKey.swift create mode 100644 Modules/Sources/TokenHandler/APITokensEnvelopeProtocol.swift rename Modules/Sources/{APIClientLive => TokenHandler}/AuthenticationhandlerAsync.swift (82%) rename Modules/Sources/{Model => TokenHandler}/JWT.swift (76%) create mode 100644 Modules/Tests/TokenHandlerTests/Models.swift rename Modules/Tests/{APIClientLiveTests/APIClientAsyncLiveTests.swift => TokenHandlerTests/TokenHandlerTests.swift} (92%) delete mode 100644 Modules/build/GeneratedModuleMaps-iphoneos/AppVersion.modulemap delete mode 100644 Modules/build/GeneratedModuleMaps-iphoneos/Model.modulemap delete mode 100644 Modules/build/GeneratedModuleMaps-iphoneos/NetworkClient.modulemap delete mode 100644 Modules/build/GeneratedModuleMaps-iphoneos/PrinterClient-Swift.h delete mode 100644 Modules/build/GeneratedModuleMaps-iphoneos/PrinterClient.modulemap delete mode 100644 Modules/build/GeneratedModuleMaps-iphoneos/SoundClient.modulemap delete mode 100644 Modules/build/GeneratedModuleMaps-iphoneos/TouchInterceptorClient.modulemap delete mode 100644 Modules/build/Modules.build/Release-iphoneos/AppVersion.build/AppVersion.modulemap delete mode 100644 Modules/build/Modules.build/Release-iphoneos/Model.build/Model.modulemap delete mode 100644 Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-OutputFileMap.json delete mode 100644 Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-master.swiftdeps delete mode 100644 Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model.LinkFileList delete mode 100644 Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model.SwiftFileList delete mode 100644 Modules/build/Modules.build/Release-iphoneos/Modules_Localizations.build/empty-Modules_Localizations.plist delete mode 100644 Modules/build/Modules.build/Release-iphoneos/Modules_SoundClient.build/empty-Modules_SoundClient.plist delete mode 100644 Modules/build/Modules.build/Release-iphoneos/Modules_Style.build/assetcatalog_dependencies delete mode 100644 Modules/build/Modules.build/Release-iphoneos/Modules_Style.build/assetcatalog_generated_info.plist delete mode 100644 Modules/build/Modules.build/Release-iphoneos/Modules_Style.build/empty-Modules_Style.plist delete mode 100644 Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/NetworkClient.modulemap delete mode 100644 Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-OutputFileMap.json delete mode 100644 Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.d delete mode 100644 Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.dia delete mode 100644 Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.swiftdeps delete mode 100644 Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient.LinkFileList delete mode 100644 Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient.SwiftFileList delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/Client.o delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-OutputFileMap.json delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-Swift.h delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.d delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.dia delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.swiftdeps delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.LinkFileList delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.SwiftFileList delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftdoc delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftmodule delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftsourceinfo delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient_dependency_info.dat delete mode 100644 Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/PrinterClient.modulemap delete mode 100644 Modules/build/Modules.build/Release-iphoneos/SoundClient.build/DerivedSources/resource_bundle_accessor.swift delete mode 100644 Modules/build/Modules.build/Release-iphoneos/SoundClient.build/Objects-normal/arm64/SoundClient-OutputFileMap.json delete mode 100644 Modules/build/Modules.build/Release-iphoneos/SoundClient.build/Objects-normal/arm64/SoundClient-master.swiftdeps delete mode 100644 Modules/build/Modules.build/Release-iphoneos/SoundClient.build/Objects-normal/arm64/SoundClient.LinkFileList delete mode 100644 Modules/build/Modules.build/Release-iphoneos/SoundClient.build/Objects-normal/arm64/SoundClient.SwiftFileList delete mode 100644 Modules/build/Modules.build/Release-iphoneos/SoundClient.build/SoundClient.modulemap delete mode 100644 Modules/build/Modules.build/Release-iphoneos/TouchInterceptorClient.build/Objects-normal/arm64/TouchInterceptorClient-OutputFileMap.json delete mode 100644 Modules/build/Modules.build/Release-iphoneos/TouchInterceptorClient.build/Objects-normal/arm64/TouchInterceptorClient-master.swiftdeps delete mode 100644 Modules/build/Modules.build/Release-iphoneos/TouchInterceptorClient.build/Objects-normal/arm64/TouchInterceptorClient.LinkFileList delete mode 100644 Modules/build/Modules.build/Release-iphoneos/TouchInterceptorClient.build/Objects-normal/arm64/TouchInterceptorClient.SwiftFileList delete mode 100644 Modules/build/Modules.build/Release-iphoneos/TouchInterceptorClient.build/TouchInterceptorClient.modulemap delete mode 100644 Modules/build/Release-iphoneos/Modules_Localizations.bundle/Info.plist delete mode 100644 Modules/build/Release-iphoneos/Modules_Localizations.bundle/Localizations_da-DK.json delete mode 100644 Modules/build/Release-iphoneos/Modules_SoundClient.bundle/Info.plist delete mode 100644 Modules/build/Release-iphoneos/Modules_SoundClient.bundle/NewOrder.mp3 delete mode 100644 Modules/build/Release-iphoneos/Modules_Style.bundle/Assets.car delete mode 100644 Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Bold.otf delete mode 100644 Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-ExtraLight.otf delete mode 100644 Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Light.otf delete mode 100644 Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Medium.otf delete mode 100644 Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Regular.otf delete mode 100644 Modules/build/Release-iphoneos/PrinterClient.o delete mode 100644 Modules/build/Release-iphoneos/PrinterClient.swiftmodule/Project/arm64-apple-ios.swiftsourceinfo delete mode 100644 Modules/build/Release-iphoneos/PrinterClient.swiftmodule/Project/arm64.swiftsourceinfo delete mode 100644 Modules/build/Release-iphoneos/PrinterClient.swiftmodule/arm64-apple-ios.swiftdoc delete mode 100644 Modules/build/Release-iphoneos/PrinterClient.swiftmodule/arm64-apple-ios.swiftmodule delete mode 100644 Modules/build/Release-iphoneos/PrinterClient.swiftmodule/arm64.swiftdoc delete mode 100644 Modules/build/Release-iphoneos/PrinterClient.swiftmodule/arm64.swiftmodule diff --git a/App/APITokensProtocolConformance.swift b/App/APITokensProtocolConformance.swift new file mode 100644 index 0000000..18bfe4c --- /dev/null +++ b/App/APITokensProtocolConformance.swift @@ -0,0 +1,20 @@ +// +// APITokensProtocolConformance.swift +// PROJECT_NAME +// +// Created by Jakob Mygind on 30/01/2023. +// + +import TokenHandler +import Model +import Foundation + +extension APITokensEnvelope: APITokensEnvelopeProtocol { + public var getAccessToken: String { + token.rawValue + } + + public var getRefreshToken: String { + refreshToken.token.rawValue + } +} diff --git a/App/AppDelegate.swift b/App/AppDelegate.swift index fbb6a9d..b29b059 100644 --- a/App/AppDelegate.swift +++ b/App/AppDelegate.swift @@ -8,28 +8,30 @@ import APIClientLive import AppFeature import Combine +import Dependencies import Localizations +import Model +import NStackSDK import PersistenceClient import Style import SwiftUI +import XCTestDynamicOverlay @main final class AppDelegate: NSObject, UIApplicationDelegate { - + func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil ) -> Bool { - + return true } } class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? - var localizations: ObservableLocalizations = .init(.bundled) - var tokenCancellable: AnyCancellable? - + func scene( _ scene: UIScene, willConnectTo session: UISceneSession, @@ -37,8 +39,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { ) { guard let scene = (scene as? UIWindowScene) else { return } self.window = UIWindow(windowScene: scene) - - self.setupNStack() + self.registerFonts() self.startAppView() } @@ -47,60 +48,29 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { // MARK: - Dependencies setup extension SceneDelegate { - + /// Allows using project specific fonts int the same way you use any of the iOS-provided fonts. /// Custom fonts should be located on the `Style`. fileprivate func registerFonts() { CustomFonts.registerCustomFonts() - } - - /// Handles setup of [NStack](https://nstack.io) services. - /// This example demonstrates [Localization](https://nstack-io.github.io/docs/docs/features/localize.html) service activation. - fileprivate func setupNStack() { - localizations = startNStackSDK( - appId: <#appID#>, - restAPIKey: <#restAPIKey#> - ) - } - + } + /// Defines content view of the window assigned to the scene with the required dependencies. /// This is the entry point for the app which defines the source of truth for related environment settings. fileprivate func startAppView() { - let baseURL = Configuration.API.baseURL - - let persistenceClient = PersistenceClient.live(keyPrefix: Bundle.main.bundleIdentifier!) - - let authHandler = AuthenticationHandler( - refreshURL: <#refreshURL#>, - tokens: persistenceClient.tokens.load() - ) - tokenCancellable = authHandler.tokenUpdatePublisher.sink( - receiveValue: persistenceClient.tokens.save) - - let environment = AppEnvironment( - mainQueue: DispatchQueue.main.eraseToAnyScheduler(), - apiClient: .live(baseURL: baseURL, authenticationHandler: authHandler), - date: Date.init, - calendar: .autoupdatingCurrent, - localizations: localizations, - appVersion: .live, - persistenceClient: persistenceClient, - tokenUpdatePublisher: authHandler.tokenUpdatePublisher.eraseToAnyPublisher(), - networkMonitor: .live(queue: .main) - ) - + + @Dependency(\.localizations) var localizations + +#if RELEASE + AppView(viewModel: .init()) + .environmentObject(localizations) +#else let apiEnvironments = Configuration.API.environments - - let vm = AppViewModel(environment: environment) - #if RELEASE - let appView = AppView(viewModel: vm) - .environmentObject(localizations) - #else - let appView = AppView(viewModel: vm) - .environmentObject(localizations) - .environment(\.apiEnvironments, apiEnvironments) - #endif - + let appView = AppView(viewModel: .init()) + .environmentObject(localizations) + .environment(\.apiEnvironments, apiEnvironments) +#endif + self.window?.rootViewController = UIHostingController(rootView: appView) self.window?.makeKeyAndVisible() } diff --git a/App/EnvVars.swift b/App/EnvVars.swift new file mode 100644 index 0000000..483476a --- /dev/null +++ b/App/EnvVars.swift @@ -0,0 +1,58 @@ +// +// EnvVars.swift +// PROJECT_NAME +// +// Created by Jakob Mygind on 24/01/2023. +// + +import Dependencies +import Foundation +import NStackSDK +import PersistenceClient + +public struct EnvVars { + + public struct NStackVars { + let appId: String + let restAPIKey: String + let environment: NStackSDK.Configuration.NStackEnvironment + } + + var baseURL: URL + var refreshURL: URL + var persistenceKeyPrefix: String + var nstackVars: NStackVars +} + +extension EnvVars: DependencyKey { +#warning("Set up environment variables here") + public static var liveValue: EnvVars { + .init( + baseURL: Configuration.API.baseURL, + refreshURL: unimplemented(), + persistenceKeyPrefix: Bundle.main.bundleIdentifier!, + nstackVars: .init( + appId: unimplemented(), + restAPIKey: unimplemented(), + environment: currentNStackEnvironment() + ) + ) + } + + static func currentNStackEnvironment() -> NStackSDK.Configuration.NStackEnvironment { + #if RELEASE + return .production + #elseif TEST + return .test + #else + return .debug + #endif + } +} + +extension DependencyValues { + public var envVars: EnvVars { + get { self[EnvVars.self] } + set { self[EnvVars.self] = newValue } + } +} diff --git a/App/Info.plist b/App/Info.plist index b23c166..9f66a43 100644 --- a/App/Info.plist +++ b/App/Info.plist @@ -2,8 +2,8 @@ - API_BASE_URL_DEV - $(API_BASE_URL_DEV) + API_BASE_URL_STAGING + $(API_BASE_URL_STAGING) API_BASE_URL_PROD $(API_BASE_URL_PROD) DEFAULT_BASE_URL diff --git a/App/LiveDependencies.swift b/App/LiveDependencies.swift new file mode 100644 index 0000000..4860ed0 --- /dev/null +++ b/App/LiveDependencies.swift @@ -0,0 +1,75 @@ +// +// Environment.swift +// PROJECT_NAME +// +// Created by Jakob Mygind on 24/01/2023. +// + +import APIClient +import APIClientLive +import AppVersion +import Dependencies +import Foundation +import Localizations +import Model +import NStackSDK +import PersistenceClient +import TokenHandler + +extension APIClient: DependencyKey { + public static var liveValue: APIClient { + + @Dependency(\.envVars) var envVars + @Dependency(\.persistenceClient) var persistenceClient + + var continuation: AsyncStream.Continuation! + + let tokenValuesStream: AsyncStream = .init { cont in + continuation = cont + } + let authHandler = AuthenticationHandlerAsync( + refreshURL: envVars.refreshURL, + getTokens: persistenceClient.tokens.load, + saveTokens: { tokens in + persistenceClient.tokens.save(tokens) + continuation.yield(tokens) + } + ) + + return APIClient.live( + baseURL: envVars.baseURL, + authenticationHandler: authHandler, + tokensUpdateStream: tokenValuesStream + ) + } +} + +extension PersistenceClient: DependencyKey { + + public static var liveValue: PersistenceClient { + @Dependency(\.envVars) var envVars + + return .live(keyPrefix: envVars.persistenceKeyPrefix) + } +} + +extension AppVersion: DependencyKey { + public static var liveValue: AppVersion { + .live + } +} + +/// Handles setup of [NStack](https://nstack.io) services. +/// This example demonstrates [Localization](https://nstack-io.github.io/docs/docs/features/localize.html) service activation. +extension ObservableLocalizations: DependencyKey { + public static var liveValue: ObservableLocalizations { + + @Dependency(\.envVars) var envVars + return startNStackSDK( + appId: envVars.nstackVars.appId, + restAPIKey: envVars.nstackVars.restAPIKey, + environment: envVars.nstackVars.environment + ) + } +} + diff --git a/App/ProjectConfig.swift b/App/ProjectConfig.swift index c075480..9c6b5b3 100644 --- a/App/ProjectConfig.swift +++ b/App/ProjectConfig.swift @@ -13,7 +13,7 @@ public enum Configuration { public enum API { enum Key: String, CaseIterable { #if !RELEASE - case dev = "API_BASE_URL_DEV" + case dev = "API_BASE_URL_STAGING" #endif case prod = "API_BASE_URL_PROD" static var defaultKey = "DEFAULT_BASE_URL" diff --git a/App/Test.xcconfig b/App/Staging.xcconfig similarity index 61% rename from App/Test.xcconfig rename to App/Staging.xcconfig index c25f93a..38124b9 100644 --- a/App/Test.xcconfig +++ b/App/Staging.xcconfig @@ -1,5 +1,5 @@ #include "Production.xcconfig" -API_BASE_URL_DEV = some.apiurl.dev.com +API_BASE_URL_STAGING = some.apiurl.dev.com DEFAULT_BASE_URL = API_BASE_URL_PROD diff --git a/Modules/.swiftpm/xcode/xcshareddata/xcschemes/TokenHandler.xcscheme b/Modules/.swiftpm/xcode/xcshareddata/xcschemes/TokenHandler.xcscheme new file mode 100644 index 0000000..114b328 --- /dev/null +++ b/Modules/.swiftpm/xcode/xcshareddata/xcschemes/TokenHandler.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Modules/Package.swift b/Modules/Package.swift index f6c04e4..ce3b34a 100644 --- a/Modules/Package.swift +++ b/Modules/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.5 +// swift-tools-version:5.7 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -23,6 +23,7 @@ let package = Package( .library(name: "NetworkClient", targets: ["NetworkClient"]), .library(name: "PersistenceClient", targets: ["PersistenceClient"]), .library(name: "Style", targets: ["Style"]), + .library(name: "TokenHandler", targets: ["TokenHandler"]), ], dependencies: [ .package(url: "https://github.com/pointfreeco/swift-tagged", from: "0.6.0"), @@ -30,6 +31,7 @@ let package = Package( .package(url: "https://github.com/pointfreeco/combine-schedulers", from: "0.5.3"), .package(url: "https://github.com/pointfreeco/swiftui-navigation", from: "0.1.0"), .package(url: "https://github.com/pointfreeco/xctest-dynamic-overlay", from: "0.3.1"), + .package(url: "https://github.com/pointfreeco/swift-dependencies", from: "0.1.4"), .package(url: "https://github.com/nstack-io/nstack-ios-sdk", branch: "feature/spm-support"), ], targets: [ @@ -38,13 +40,15 @@ let package = Package( .target( name: "APIClient", dependencies: [ - "Model", .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"), + "Model", + .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"), + .product(name: "Dependencies", package: "swift-dependencies"), ], resources: [] ), .target( name: "APIClientLive", - dependencies: ["APIClient", "Model"], + dependencies: ["APIClient", "Model", "TokenHandler"], resources: [] ), .testTarget( @@ -66,7 +70,8 @@ let package = Package( .target( name: "AppVersion", dependencies: [ - .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay") + .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"), + .product(name: "Dependencies", package: "swift-dependencies"), ], resources: [] ), @@ -82,6 +87,7 @@ let package = Package( .product(name: "CombineSchedulers", package: "combine-schedulers"), "Localizations", "Model", "Style", .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"), + .product(name: "Dependencies", package: "swift-dependencies"), ], resources: [] ), @@ -92,7 +98,10 @@ let package = Package( ]), .target( name: "Localizations", - dependencies: [.product(name: "NStackSDK", package: "nstack-ios-sdk")], + dependencies: [ + .product(name: "NStackSDK", package: "nstack-ios-sdk"), + .product(name: "Dependencies", package: "swift-dependencies"), + ], exclude: [ "SKLocalizations.swift", "NStack/NStack.plist", @@ -125,14 +134,18 @@ let package = Package( .target( name: "NetworkClient", dependencies: [ - .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay") + .product(name: "XCTestDynamicOverlay", package: "xctest-dynamic-overlay"), + .product(name: "Dependencies", package: "swift-dependencies"), ], resources: [] ), .target( name: "PersistenceClient", - dependencies: ["Model"], + dependencies: [ + "Model", + .product(name: "Dependencies", package: "swift-dependencies"), + ], resources: [] ), @@ -141,6 +154,17 @@ let package = Package( dependencies: [ "Helpers", .product(name: "SwiftUINavigation", package: "swiftui-navigation"), ], - resources: [.process("Colors.xcassets"), .process("Fonts")]), + resources: [.process("Colors.xcassets"), .process("Fonts")] + ), + .target( + name: "TokenHandler", + dependencies: [], + resources: [] + ), + .testTarget( + name: "TokenHandlerTests", + dependencies: [ + "TokenHandler", + ]), ] ) diff --git a/Modules/Sources/APIClient/Client.swift b/Modules/Sources/APIClient/Client.swift index 69d2144..5fee783 100644 --- a/Modules/Sources/APIClient/Client.swift +++ b/Modules/Sources/APIClient/Client.swift @@ -14,33 +14,29 @@ import XCTestDynamicOverlay public struct APIClient { public var authenticate: (Username, Password) async throws -> APITokensEnvelope - public var refreshToken: (RefreshToken) async throws -> APITokensEnvelope - public var setToken: (APITokensEnvelope) -> Void public var setBaseURL: (URL) -> Void public var currentBaseURL: () -> URL + public var tokensUpdateStream: AsyncStream public init( authenticate: @escaping (Username, Password) async throws -> APITokensEnvelope, - refreshToken: @escaping (RefreshToken) async throws -> APITokensEnvelope, - setToken: @escaping (APITokensEnvelope) -> Void, setBaseURL: @escaping (URL) -> Void, - currentBaseURL: @escaping () -> URL + currentBaseURL: @escaping () -> URL, + tokensUpdateStream: AsyncStream ) { self.authenticate = authenticate - self.refreshToken = refreshToken - self.setToken = setToken self.setBaseURL = setBaseURL self.currentBaseURL = currentBaseURL + self.tokensUpdateStream = tokensUpdateStream } } extension APIClient { public static let failing = APIClient( - authenticate: XCTUnimplemented("authenticate failing endpoint called"), - refreshToken: XCTUnimplemented("\(Self.self).refreshToken failing endpoint called") , - setToken: { _ in XCTFail("\(Self.self).setToken failing endpoint called") }, - setBaseURL: { _ in fatalError() }, - currentBaseURL: { fatalError() } + authenticate: unimplemented("authenticate failing endpoint called"), + setBaseURL: unimplemented("setBaseURL"), + currentBaseURL: unimplemented("currentBaseURL"), + tokensUpdateStream: unimplemented("tokensUpdateStream") ) } diff --git a/Modules/Sources/APIClient/DependencyKey.swift b/Modules/Sources/APIClient/DependencyKey.swift new file mode 100644 index 0000000..b55597e --- /dev/null +++ b/Modules/Sources/APIClient/DependencyKey.swift @@ -0,0 +1,23 @@ +// +// File.swift +// +// +// Created by Jakob Mygind on 24/01/2023. +// + +import Dependencies +import Foundation + +extension APIClient: TestDependencyKey { + + public static var testValue: APIClient { + .failing + } +} + +public extension DependencyValues { + var apiClient: APIClient { + get { self[APIClient.self] } + set { self[APIClient.self] = newValue } + } +} diff --git a/Modules/Sources/APIClient/Mocks.swift b/Modules/Sources/APIClient/Mocks.swift index d4e5930..01ae5e6 100644 --- a/Modules/Sources/APIClient/Mocks.swift +++ b/Modules/Sources/APIClient/Mocks.swift @@ -12,9 +12,8 @@ import Model extension APIClient { public static let mock = Self( authenticate: { _, _ in .mock }, - refreshToken: { _ in .mock }, - setToken: { _ in }, setBaseURL: { _ in }, - currentBaseURL: { URL.init(string: ":")! } + currentBaseURL: { URL.init(string: ":")! }, + tokensUpdateStream: .init(unfolding: { .none }) ) } diff --git a/Modules/Sources/APIClientLive/AuthenticationHandler.swift b/Modules/Sources/APIClientLive/AuthenticationHandler.swift deleted file mode 100644 index 348491a..0000000 --- a/Modules/Sources/APIClientLive/AuthenticationHandler.swift +++ /dev/null @@ -1,189 +0,0 @@ -// -// File.swift -// -// -// Created by Jakob Mygind on 15/12/2021. -// - -import Combine -import Foundation -import Model - -/// This class is used to authenticate all requests, and if needed refresh the tokens -/// The state of tokens can be monitored by subscribing to `tokenUpdatePublisher`, if this outouts nil, it means the user should log in again -public class AuthenticationHandler { - - public let tokenUpdatePublisher: CurrentValueSubject - var now: () -> Date = Date.init - var networkRequestPublisher: - (URLRequest) -> AnyPublisher< - URLSession.DataTaskPublisher.Output, URLSession.DataTaskPublisher.Failure - > = { - URLSession.shared.dataTaskPublisher(for: $0).eraseToAnyPublisher() - } - private let queue = DispatchQueue(label: "Authenticator.\(UUID().uuidString)") - private(set) var refreshPublisher: PassthroughSubject? - - private var refreshURL: URL - var apiTokens: APITokensEnvelope? { - didSet { - if let apiTokens = apiTokens { - refreshPublisher?.send(apiTokens) - } else { - refreshPublisher?.send(completion: .finished) - } - tokenUpdatePublisher.send(apiTokens) - } - } - - public init( - refreshURL: URL, - tokens: APITokensEnvelope? - ) { - self.apiTokens = tokens - self.tokenUpdatePublisher = CurrentValueSubject(tokens) - self.refreshURL = refreshURL - } - - #if DEBUG - init( - - now: @escaping () -> Date = Date.init, - networkRequestPublisher: @escaping (URLRequest) -> AnyPublisher< - URLSession.DataTaskPublisher.Output, URLSession.DataTaskPublisher.Failure - > = { - URLSession.shared.dataTaskPublisher(for: $0).eraseToAnyPublisher() - }, - refreshPublisher: PassthroughSubject? = nil, - refreshURL: URL, - apiTokens: APITokensEnvelope? = nil - ) { - self.tokenUpdatePublisher = CurrentValueSubject(apiTokens) - self.now = now - self.networkRequestPublisher = networkRequestPublisher - self.refreshPublisher = refreshPublisher - self.refreshURL = refreshURL - self.apiTokens = apiTokens - } - - #endif - - /// Authenticates URLRequests - /// - Parameter request: Requests to be authenticated - /// - Returns: The result of the request - public func authenticateRequest(_ request: URLRequest) -> AnyPublisher< - URLSession.DataTaskPublisher.Output, Error - > { - return queue.sync { - - guard let apiTokens = apiTokens else { - return Fail(error: URLError(.userAuthenticationRequired)).eraseToAnyPublisher() - } - - if let tokenSubject = refreshPublisher { - return - tokenSubject - .flatMap { [unowned self] in - makeAuthenticatedRequest(request, accessToken: $0.token) - }.eraseToAnyPublisher() - } - - if !apiTokens.token.isValid(now: now()) { - self.refreshPublisher = .init() - return self.refreshTokens(using: apiTokens.refreshToken.token) - .handleEvents( - receiveOutput: { self.apiTokens = $0 }, - receiveCompletion: { _ in - self.refreshPublisher = nil - } - ) - .map(\.token) - .flatMap { [unowned self] in makeAuthenticatedRequest(request, accessToken: $0) - } - .tryCatch { - [unowned self] (error: Error) throws -> AnyPublisher< - URLSession.DataTaskPublisher.Output, Error - > in - if let urlError = error as? URLError, - urlError == URLError(.userAuthenticationRequired) - { - self.apiTokens = nil - return Empty(completeImmediately: true).eraseToAnyPublisher() - } else { - throw error - } - } - .eraseToAnyPublisher() - } - - return makeAuthenticatedRequest(request, accessToken: apiTokens.token) - } - } - - /// Adds access token to request - /// throws auth error if provided token should be invalid - private func makeAuthenticatedRequest( - _ request: URLRequest, - accessToken: AccessToken - ) -> AnyPublisher { - var request = request - request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization") - return networkRequestPublisher(request) - .tryMap { - if let code = ($0.1 as? HTTPURLResponse)?.statusCode, - code == 401 - { - throw URLError(.userAuthenticationRequired) - } else { - return $0 - } - } - .mapError { $0 as Error } - .eraseToAnyPublisher() - } - - /// Make call to refresh access token - /// - Parameter refreshToken: refreshtoken to be used - /// - Returns: A fresh set of tokens - private func refreshTokens(using refreshToken: RefreshToken) -> AnyPublisher { - struct Body: Encodable { - let token: String - } - - let decoder = JSONDecoder() - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ" - decoder.dateDecodingStrategy = .formatted(formatter) - - return makePostRequest(url: refreshURL, requestBody: Body(token: refreshToken.rawValue)) - .publisher - .flatMap(networkRequestPublisher) - .tryMap { - if let code = ($0.1 as? HTTPURLResponse)?.statusCode, - code == 401 - { - throw URLError(.userAuthenticationRequired) - } else { - return $0.data - } - } - .decode(type: APITokensEnvelope.self, decoder: decoder) - .eraseToAnyPublisher() - } -} - -#if !RELEASE - extension AccessToken { - /// A token with expiry some time in December afair - public static let expired = AccessToken( - rawValue: - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMyIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjM5NTg0OTUyLCJleHAiOjE2Mzk1ODYxNTIsImlhdCI6MTYzOTU4NDk1Mn0.X2w58Hk8Wtct3-PHYqPLGmCsUgrPuLcp9-hw98E4ZCM" - ) - - public static let expires06142256 = AccessToken( - rawValue: - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMyIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjo5MDM5NTg0OTUyLCJleHAiOjkwMzk1ODQ5NTIsImlhdCI6OTAzOTU4NDk1Mn0.NUkAhQu3Enh-S02ktYWA97OVkp3skSkLcYXFEEpHCfw" - ) - } -#endif diff --git a/Modules/Sources/APIClientLive/Client.swift b/Modules/Sources/APIClientLive/Client.swift index aaff235..1599b1f 100644 --- a/Modules/Sources/APIClientLive/Client.swift +++ b/Modules/Sources/APIClientLive/Client.swift @@ -9,6 +9,8 @@ import APIClient import Combine import Foundation import Model +import TokenHandler +import XCTestDynamicOverlay extension APIClient { @@ -17,41 +19,18 @@ extension APIClient { /// - url: base url to be used /// - authenticationHandler: AuthenticationHandler type /// - Returns: Live APIclient - public static func live( + public static func live( baseURL url: URL, - authenticationHandler: AuthenticationHandler + authenticationHandler: AuthenticationHandlerAsync, + tokensUpdateStream: AsyncStream ) -> Self { var baseURL = url - + let tokensUpdateStream = tokensUpdateStream return Self( - authenticate: { username, password in - fatalError() -// struct Body: Encodable { -// let username: String -// let password: String -// } -// -// let decoder = JSONDecoder() -// let formatter = DateFormatter() -// formatter.locale = Locale(identifier: "en_US_POSIX") -// formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ" -// decoder.dateDecodingStrategy = .formatted(formatter) -// -// return makePostRequest( -// url: baseURL.appendingPathComponent("authenticate"), -// requestBody: Body(username: username.rawValue, password: password.rawValue) -// ) -// .publisher -// .flatMap(URLSession.shared.dataTaskPublisher(for:)) -// .apiDecode(as: APITokens.self, jsonDecoder: decoder) -// .eraseToAnyPublisher() - }, - refreshToken: { _ in fatalError("Manually refreshing should not be necessary") }, - setToken: { - authenticationHandler.apiTokens = $0 - }, + authenticate: unimplemented(), setBaseURL: { baseURL = $0 }, - currentBaseURL: { baseURL } + currentBaseURL: { baseURL }, + tokensUpdateStream: tokensUpdateStream ) } } diff --git a/Modules/Sources/APIClientLive/RequestBuilders.swift b/Modules/Sources/APIClientLive/RequestBuilders.swift index f609c56..97807b8 100644 --- a/Modules/Sources/APIClientLive/RequestBuilders.swift +++ b/Modules/Sources/APIClientLive/RequestBuilders.swift @@ -7,10 +7,11 @@ import Combine import Foundation import Model +import TokenHandler /// Type erasing wrapper used bc enum cases cannot be generic struct AnyEncodable: Encodable { - let wrapped: Encodable + let wrapped: any Encodable public init(_ input: Input) { self.wrapped = input } @@ -21,10 +22,8 @@ struct AnyEncodable: Encodable { } extension URLRequest { - func authenticateAndPerform(using handler: AuthenticationHandler) -> AnyPublisher< - URLSession.DataTaskPublisher.Output, Error - > { - handler.authenticateRequest(self) + func authenticateAndPerform(using handler: AuthenticationHandlerAsync) async throws -> URLSession.DataTaskPublisher.Output { + try await handler.performAuthenticatedRequest(self) } } diff --git a/Modules/Sources/AppFeature/AppEnvironment.swift b/Modules/Sources/AppFeature/AppEnvironment.swift deleted file mode 100644 index a47beaf..0000000 --- a/Modules/Sources/AppFeature/AppEnvironment.swift +++ /dev/null @@ -1,84 +0,0 @@ -// -// File.swift -// -// -// Created by Jakob Mygind on 20/12/2021. -// - -import APIClient -import AppVersion -import Combine -import CombineSchedulers -import Localizations -import Model -import NetworkClient -import PersistenceClient -import XCTestDynamicOverlay - -/// All encompassing environment -public struct AppEnvironment { - - var mainQueue: AnySchedulerOf - var apiClient: APIClient - var date: () -> Date - var calendar: Calendar - var localizations: ObservableLocalizations - var appVersion: AppVersion - var persistenceClient: PersistenceClient - var tokenUpdatePublisher: AnyPublisher - var networkMonitor: NetworkClient - - public init( - mainQueue: AnySchedulerOf, - apiClient: APIClient, - date: @escaping () -> Date, - calendar: Calendar, - localizations: ObservableLocalizations, - appVersion: AppVersion, - persistenceClient: PersistenceClient, - tokenUpdatePublisher: AnyPublisher, - networkMonitor: NetworkClient - ) { - self.mainQueue = mainQueue - self.apiClient = apiClient - self.date = date - self.calendar = calendar - self.localizations = localizations - self.appVersion = appVersion - self.persistenceClient = persistenceClient - self.tokenUpdatePublisher = tokenUpdatePublisher - self.networkMonitor = networkMonitor - } -} - -extension AppEnvironment { - - public static let mock = Self( - mainQueue: DispatchQueue.main.eraseToAnyScheduler(), - apiClient: .mock, - date: Date.init, - calendar: .init(identifier: .gregorian), - localizations: .init(.bundled), - appVersion: .noop, - persistenceClient: .mock, - tokenUpdatePublisher: Empty(completeImmediately: false).eraseToAnyPublisher(), - networkMonitor: .happy - ) - - #if DEBUG - static let failing = Self( - mainQueue: .failing, - apiClient: .failing, - date: { - XCTFail("Not implemented") - return Date() - }, - calendar: .init(identifier: .gregorian), - localizations: .init(.bundled), - appVersion: .failing, - persistenceClient: .failing, - tokenUpdatePublisher: .failing(), - networkMonitor: .failing - ) - #endif -} diff --git a/Modules/Sources/AppFeature/AppView.swift b/Modules/Sources/AppFeature/AppView.swift index bc03792..bb0741b 100644 --- a/Modules/Sources/AppFeature/AppView.swift +++ b/Modules/Sources/AppFeature/AppView.swift @@ -14,11 +14,11 @@ import SwiftUINavigation /// View that can switch between Login and Main view public struct AppView: View { @ObservedObject var viewModel: AppViewModel - + public init(viewModel: AppViewModel) { self.viewModel = viewModel } - + public var body: some View { IfLet($viewModel.route) { $route in Switch($route) { @@ -50,54 +50,42 @@ public struct AppView: View { } else: { ProgressView() } - // .onAppear(perform: viewModel.onAppear) + .onAppear(perform: viewModel.onAppear) } } #if DEBUG - import Localizations - - struct AppView_Previews: PreviewProvider { - static var localizations: ObservableLocalizations = .init(.bundled) +import Localizations - static var previews: some View { - AppView(viewModel: .init(environment: .mock)) - .previewDisplayName("No Route") - - AppView( - viewModel: .init( - environment: .mock, - route: .main( - .init(environment: .init(mainQueue: .immediate))) +struct AppView_Previews: PreviewProvider { + static var localizations: ObservableLocalizations = .init(.bundled) + + static var previews: some View { + AppView(viewModel: .init()) + .previewDisplayName("No Route") + + AppView( + viewModel: .init( + route: .main( + .init() ) ) - .registerFonts() - .environmentObject(ObservableLocalizations.init(.bundled)) - .previewDisplayName("Main") - - let environment: AppEnvironment = .mock - AppView( - viewModel: .init( - environment: environment, - route: .login( - .init( - onSuccess: { _, _ in }, - environment: - LoginEnvironment( - mainQueue: environment.mainQueue, - apiClient: environment.apiClient, - date: environment.date, - calendar: environment.calendar, - localizations: environment.localizations, - appVersion: environment.appVersion - ) - ) - ) + ) + .registerFonts() + .environmentObject(ObservableLocalizations.bundled) + .previewDisplayName("Main") + + AppView( + viewModel: .init(route: .login( + .init( + onSuccess: { _, _ in } ) ) - .registerFonts() - .environmentObject(ObservableLocalizations.init(.bundled)) - .previewDisplayName("Login") - } + ) + ) + .registerFonts() + .environmentObject(ObservableLocalizations.bundled) + .previewDisplayName("Login") } +} #endif diff --git a/Modules/Sources/AppFeature/AppViewModel.swift b/Modules/Sources/AppFeature/AppViewModel.swift index 3ada035..8e36406 100644 --- a/Modules/Sources/AppFeature/AppViewModel.swift +++ b/Modules/Sources/AppFeature/AppViewModel.swift @@ -6,20 +6,24 @@ // import Combine +import Dependencies import LoginFeature import MainFeature +import Model +import PersistenceClient import SwiftUI public class AppViewModel: ObservableObject { - var environment: AppEnvironment - var cancellables: Set = [] - public enum Route { case login(LoginViewModel) case main(MainViewModel) } @Published var route: Route? + + @Dependency(\.apiClient) var apiClient + @Dependency(\.persistenceClient) var persistenceClient + @Dependency(\.date) var date enum BannerState { case offline(String) @@ -29,27 +33,23 @@ public class AppViewModel: ObservableObject { @Published var bannerState: BannerState? public init( - environment: AppEnvironment, route: AppViewModel.Route? = nil ) { - self.environment = environment self.route = route - environment.tokenUpdatePublisher - .dropFirst() - .filter { $0 == nil } - .removeDuplicates() - .sink { [unowned self] _ in - showLogin() + + Task { + for await token in apiClient.tokensUpdateStream { + if token == nil { + showLogin() + } } - .store(in: &cancellables) - - + } } func onAppear() { if - let tokens = environment.persistenceClient.tokens.load(), - tokens.refreshToken.expiresAt > environment.date() { + let tokens = persistenceClient.tokens.load(), + tokens.refreshToken.expiresAt > date() { showMain() } else { showLogin() @@ -61,26 +61,19 @@ public class AppViewModel: ObservableObject { route = .login( .init( onSuccess: { [unowned self] in - environment.persistenceClient.tokens.save($0) - environment.apiClient.setToken($0) - environment.persistenceClient.email.save($1) + persistenceClient.tokens.save($0) + persistenceClient.email.save($1) withAnimation { showMain() } - }, - environment: LoginEnvironment( - mainQueue: environment.mainQueue, - apiClient: environment.apiClient, - date: environment.date, - calendar: environment.calendar, - localizations: environment.localizations, - appVersion: environment.appVersion - ))) + } + ) + ) } func showMain() { route = .main( - .init(environment: .init(mainQueue: environment.mainQueue)) + .init() ) } } diff --git a/Modules/Sources/AppVersion/DependencyKey.swift b/Modules/Sources/AppVersion/DependencyKey.swift new file mode 100644 index 0000000..a004b43 --- /dev/null +++ b/Modules/Sources/AppVersion/DependencyKey.swift @@ -0,0 +1,22 @@ +// +// File.swift +// +// +// Created by Jakob Mygind on 01/02/2023. +// + +import Dependencies +import Foundation + +extension AppVersion: TestDependencyKey { + public static var testValue: AppVersion { + .failing + } +} + +extension DependencyValues { + public var appVersion: AppVersion { + get { self[AppVersion.self] } + set { self[AppVersion.self] = newValue } + } +} diff --git a/Modules/Sources/AppVersion/Version.swift b/Modules/Sources/AppVersion/Version.swift index a35375c..f1f46c0 100644 --- a/Modules/Sources/AppVersion/Version.swift +++ b/Modules/Sources/AppVersion/Version.swift @@ -31,19 +31,18 @@ public struct AppVersion { ) } -#if DEBUG - import XCTestDynamicOverlay - - extension AppVersion { - public static let failing = Self( - version: { - XCTFail("\(Self.self).version is unimplemented") - return "" - }, - build: { - XCTFail("\(Self.self).build is unimplemented") - return "" - } - ) - } -#endif + +import XCTestDynamicOverlay + +extension AppVersion { + public static let failing = Self( + version: { + XCTFail("\(Self.self).version is unimplemented") + return "" + }, + build: { + XCTFail("\(Self.self).build is unimplemented") + return "" + } + ) +} diff --git a/Modules/Sources/Localizations/DependencyKey.swift b/Modules/Sources/Localizations/DependencyKey.swift new file mode 100644 index 0000000..69950a6 --- /dev/null +++ b/Modules/Sources/Localizations/DependencyKey.swift @@ -0,0 +1,22 @@ +// +// File.swift +// +// +// Created by Jakob Mygind on 30/01/2023. +// + +import Dependencies +import Foundation + +extension ObservableLocalizations: TestDependencyKey { + public static var testValue: ObservableLocalizations { + .bundled + } +} + +public extension DependencyValues { + var localizations: ObservableLocalizations { + get { self[ObservableLocalizations.self] } + set { self[ObservableLocalizations.self] = newValue } + } +} diff --git a/Modules/Sources/Localizations/Localizations.swift b/Modules/Sources/Localizations/Localizations.swift index 7f10303..91ae203 100644 --- a/Modules/Sources/Localizations/Localizations.swift +++ b/Modules/Sources/Localizations/Localizations.swift @@ -33,34 +33,34 @@ import NLocalizationManager import LocalizationManager #endif public final class Localizations: LocalizableModel { - public var settings = Settings() - public var units = Units() + public var defaultSection = DefaultSection() + public var login = Login() public var printer = Printer() public var dashboard = Dashboard() - public var login = Login() public var searchOrders = SearchOrders() - public var orderStatus = OrderStatus() + public var error = Error() + public var units = Units() + public var deliveryType = DeliveryType() + public var settings = Settings() public var orderDetails = OrderDetails() public var orderDetailNewOrderSection = OrderDetailNewOrderSection() - public var deliveryType = DeliveryType() - public var defaultSection = DefaultSection() public var printerOutput = PrinterOutput() - public var error = Error() + public var orderStatus = OrderStatus() enum CodingKeys: String, CodingKey { - case settings - case units + case defaultSection = "default" + case login case printer case dashboard - case login case searchOrders - case orderStatus + case error + case units + case deliveryType + case settings case orderDetails case orderDetailNewOrderSection - case deliveryType - case defaultSection = "default" case printerOutput - case error + case orderStatus } public override init() { super.init() } @@ -68,65 +68,69 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - settings = try container.decodeIfPresent(Settings.self, forKey: .settings) ?? settings - units = try container.decodeIfPresent(Units.self, forKey: .units) ?? units + defaultSection = try container.decodeIfPresent(DefaultSection.self, forKey: .defaultSection) ?? defaultSection + login = try container.decodeIfPresent(Login.self, forKey: .login) ?? login printer = try container.decodeIfPresent(Printer.self, forKey: .printer) ?? printer dashboard = try container.decodeIfPresent(Dashboard.self, forKey: .dashboard) ?? dashboard - login = try container.decodeIfPresent(Login.self, forKey: .login) ?? login searchOrders = try container.decodeIfPresent(SearchOrders.self, forKey: .searchOrders) ?? searchOrders - orderStatus = try container.decodeIfPresent(OrderStatus.self, forKey: .orderStatus) ?? orderStatus + error = try container.decodeIfPresent(Error.self, forKey: .error) ?? error + units = try container.decodeIfPresent(Units.self, forKey: .units) ?? units + deliveryType = try container.decodeIfPresent(DeliveryType.self, forKey: .deliveryType) ?? deliveryType + settings = try container.decodeIfPresent(Settings.self, forKey: .settings) ?? settings orderDetails = try container.decodeIfPresent(OrderDetails.self, forKey: .orderDetails) ?? orderDetails orderDetailNewOrderSection = try container.decodeIfPresent(OrderDetailNewOrderSection.self, forKey: .orderDetailNewOrderSection) ?? orderDetailNewOrderSection - deliveryType = try container.decodeIfPresent(DeliveryType.self, forKey: .deliveryType) ?? deliveryType - defaultSection = try container.decodeIfPresent(DefaultSection.self, forKey: .defaultSection) ?? defaultSection printerOutput = try container.decodeIfPresent(PrinterOutput.self, forKey: .printerOutput) ?? printerOutput - error = try container.decodeIfPresent(Error.self, forKey: .error) ?? error + orderStatus = try container.decodeIfPresent(OrderStatus.self, forKey: .orderStatus) ?? orderStatus } public override subscript(key: String) -> LocalizableSection? { switch key { - case CodingKeys.settings.stringValue: return settings - case CodingKeys.units.stringValue: return units + case CodingKeys.defaultSection.stringValue: return defaultSection + case CodingKeys.login.stringValue: return login case CodingKeys.printer.stringValue: return printer case CodingKeys.dashboard.stringValue: return dashboard - case CodingKeys.login.stringValue: return login case CodingKeys.searchOrders.stringValue: return searchOrders - case CodingKeys.orderStatus.stringValue: return orderStatus + case CodingKeys.error.stringValue: return error + case CodingKeys.units.stringValue: return units + case CodingKeys.deliveryType.stringValue: return deliveryType + case CodingKeys.settings.stringValue: return settings case CodingKeys.orderDetails.stringValue: return orderDetails case CodingKeys.orderDetailNewOrderSection.stringValue: return orderDetailNewOrderSection - case CodingKeys.deliveryType.stringValue: return deliveryType - case CodingKeys.defaultSection.stringValue: return defaultSection case CodingKeys.printerOutput.stringValue: return printerOutput - case CodingKeys.error.stringValue: return error + case CodingKeys.orderStatus.stringValue: return orderStatus default: return nil } } - public final class Settings: LocalizableSection { - public var printerHeader = "" - public var title = "" - public var logOutAlertMessage = "" - public var usernameHeader = "" - public var appVersionHeader = "" - public var selectPrinterButton = "" - public var closeButton = "" - public var logOutAlertConfirm = "" - public var logOutAlertCancel = "" - public var logoutAlertTitle = "" - public var logOutButton = "" + public final class DefaultSection: LocalizableSection { + public var skip = "" + public var edit = "" + public var retry = "" + public var ok = "" + public var no = "" + public var previous = "" + public var back = "" + public var cancel = "" + public var save = "" + public var settings = "" + public var yes = "" + public var later = "" + public var next = "" enum CodingKeys: String, CodingKey { - case printerHeader - case title - case logOutAlertMessage - case usernameHeader - case appVersionHeader - case selectPrinterButton - case closeButton - case logOutAlertConfirm - case logOutAlertCancel - case logoutAlertTitle - case logOutButton + case skip + case edit + case retry + case ok + case no + case previous + case back + case cancel + case save + case settings + case yes + case later + case next } public override init() { super.init() } @@ -134,60 +138,64 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - printerHeader = try container.decodeIfPresent(String.self, forKey: .printerHeader) ?? "__printerHeader" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - logOutAlertMessage = try container.decodeIfPresent(String.self, forKey: .logOutAlertMessage) ?? "__logOutAlertMessage" - usernameHeader = try container.decodeIfPresent(String.self, forKey: .usernameHeader) ?? "__usernameHeader" - appVersionHeader = try container.decodeIfPresent(String.self, forKey: .appVersionHeader) ?? "__appVersionHeader" - selectPrinterButton = try container.decodeIfPresent(String.self, forKey: .selectPrinterButton) ?? "__selectPrinterButton" - closeButton = try container.decodeIfPresent(String.self, forKey: .closeButton) ?? "__closeButton" - logOutAlertConfirm = try container.decodeIfPresent(String.self, forKey: .logOutAlertConfirm) ?? "__logOutAlertConfirm" - logOutAlertCancel = try container.decodeIfPresent(String.self, forKey: .logOutAlertCancel) ?? "__logOutAlertCancel" - logoutAlertTitle = try container.decodeIfPresent(String.self, forKey: .logoutAlertTitle) ?? "__logoutAlertTitle" - logOutButton = try container.decodeIfPresent(String.self, forKey: .logOutButton) ?? "__logOutButton" + skip = try container.decodeIfPresent(String.self, forKey: .skip) ?? "__skip" + edit = try container.decodeIfPresent(String.self, forKey: .edit) ?? "__edit" + retry = try container.decodeIfPresent(String.self, forKey: .retry) ?? "__retry" + ok = try container.decodeIfPresent(String.self, forKey: .ok) ?? "__ok" + no = try container.decodeIfPresent(String.self, forKey: .no) ?? "__no" + previous = try container.decodeIfPresent(String.self, forKey: .previous) ?? "__previous" + back = try container.decodeIfPresent(String.self, forKey: .back) ?? "__back" + cancel = try container.decodeIfPresent(String.self, forKey: .cancel) ?? "__cancel" + save = try container.decodeIfPresent(String.self, forKey: .save) ?? "__save" + settings = try container.decodeIfPresent(String.self, forKey: .settings) ?? "__settings" + yes = try container.decodeIfPresent(String.self, forKey: .yes) ?? "__yes" + later = try container.decodeIfPresent(String.self, forKey: .later) ?? "__later" + next = try container.decodeIfPresent(String.self, forKey: .next) ?? "__next" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.printerHeader.stringValue: return printerHeader - case CodingKeys.title.stringValue: return title - case CodingKeys.logOutAlertMessage.stringValue: return logOutAlertMessage - case CodingKeys.usernameHeader.stringValue: return usernameHeader - case CodingKeys.appVersionHeader.stringValue: return appVersionHeader - case CodingKeys.selectPrinterButton.stringValue: return selectPrinterButton - case CodingKeys.closeButton.stringValue: return closeButton - case CodingKeys.logOutAlertConfirm.stringValue: return logOutAlertConfirm - case CodingKeys.logOutAlertCancel.stringValue: return logOutAlertCancel - case CodingKeys.logoutAlertTitle.stringValue: return logoutAlertTitle - case CodingKeys.logOutButton.stringValue: return logOutButton + case CodingKeys.skip.stringValue: return skip + case CodingKeys.edit.stringValue: return edit + case CodingKeys.retry.stringValue: return retry + case CodingKeys.ok.stringValue: return ok + case CodingKeys.no.stringValue: return no + case CodingKeys.previous.stringValue: return previous + case CodingKeys.back.stringValue: return back + case CodingKeys.cancel.stringValue: return cancel + case CodingKeys.save.stringValue: return save + case CodingKeys.settings.stringValue: return settings + case CodingKeys.yes.stringValue: return yes + case CodingKeys.later.stringValue: return later + case CodingKeys.next.stringValue: return next default: return nil } } } - public final class Units: LocalizableSection { - public var d70 = "" - public var grm = "" - public var kgm = "" - public var e14 = "" - public var dlt = "" - public var h87 = "" - public var mlt = "" - public var ltr = "" - public var clt = "" - public var cmt = "" + public final class Login: LocalizableSection { + public var loginButton = "" + public var appVersionPrefix = "" + public var emailPlaceholder = "" + public var passwordHeader = "" + public var passwordPlaceholder = "" + public var title = "" + public var emailHeader = "" + public var appName = "" + public var errorInvalidCredentials = "" + public var resetPasswordMessage = "" enum CodingKeys: String, CodingKey { - case d70 - case grm - case kgm - case e14 - case dlt - case h87 - case mlt - case ltr - case clt - case cmt + case loginButton + case appVersionPrefix + case emailPlaceholder + case passwordHeader + case passwordPlaceholder + case title + case emailHeader + case appName + case errorInvalidCredentials + case resetPasswordMessage } public override init() { super.init() } @@ -195,81 +203,81 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - d70 = try container.decodeIfPresent(String.self, forKey: .d70) ?? "__d70" - grm = try container.decodeIfPresent(String.self, forKey: .grm) ?? "__grm" - kgm = try container.decodeIfPresent(String.self, forKey: .kgm) ?? "__kgm" - e14 = try container.decodeIfPresent(String.self, forKey: .e14) ?? "__e14" - dlt = try container.decodeIfPresent(String.self, forKey: .dlt) ?? "__dlt" - h87 = try container.decodeIfPresent(String.self, forKey: .h87) ?? "__h87" - mlt = try container.decodeIfPresent(String.self, forKey: .mlt) ?? "__mlt" - ltr = try container.decodeIfPresent(String.self, forKey: .ltr) ?? "__ltr" - clt = try container.decodeIfPresent(String.self, forKey: .clt) ?? "__clt" - cmt = try container.decodeIfPresent(String.self, forKey: .cmt) ?? "__cmt" + loginButton = try container.decodeIfPresent(String.self, forKey: .loginButton) ?? "__loginButton" + appVersionPrefix = try container.decodeIfPresent(String.self, forKey: .appVersionPrefix) ?? "__appVersionPrefix" + emailPlaceholder = try container.decodeIfPresent(String.self, forKey: .emailPlaceholder) ?? "__emailPlaceholder" + passwordHeader = try container.decodeIfPresent(String.self, forKey: .passwordHeader) ?? "__passwordHeader" + passwordPlaceholder = try container.decodeIfPresent(String.self, forKey: .passwordPlaceholder) ?? "__passwordPlaceholder" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + emailHeader = try container.decodeIfPresent(String.self, forKey: .emailHeader) ?? "__emailHeader" + appName = try container.decodeIfPresent(String.self, forKey: .appName) ?? "__appName" + errorInvalidCredentials = try container.decodeIfPresent(String.self, forKey: .errorInvalidCredentials) ?? "__errorInvalidCredentials" + resetPasswordMessage = try container.decodeIfPresent(String.self, forKey: .resetPasswordMessage) ?? "__resetPasswordMessage" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.d70.stringValue: return d70 - case CodingKeys.grm.stringValue: return grm - case CodingKeys.kgm.stringValue: return kgm - case CodingKeys.e14.stringValue: return e14 - case CodingKeys.dlt.stringValue: return dlt - case CodingKeys.h87.stringValue: return h87 - case CodingKeys.mlt.stringValue: return mlt - case CodingKeys.ltr.stringValue: return ltr - case CodingKeys.clt.stringValue: return clt - case CodingKeys.cmt.stringValue: return cmt + case CodingKeys.loginButton.stringValue: return loginButton + case CodingKeys.appVersionPrefix.stringValue: return appVersionPrefix + case CodingKeys.emailPlaceholder.stringValue: return emailPlaceholder + case CodingKeys.passwordHeader.stringValue: return passwordHeader + case CodingKeys.passwordPlaceholder.stringValue: return passwordPlaceholder + case CodingKeys.title.stringValue: return title + case CodingKeys.emailHeader.stringValue: return emailHeader + case CodingKeys.appName.stringValue: return appName + case CodingKeys.errorInvalidCredentials.stringValue: return errorInvalidCredentials + case CodingKeys.resetPasswordMessage.stringValue: return resetPasswordMessage default: return nil } } } public final class Printer: LocalizableSection { - public var title = "" - public var connectButton = "" - public var sectionHeaderNewPrinters = "" - public var errorSomethingHappened = "" - public var connectedSuccessMessage = "" - public var bluetoothHintFooter = "" public var deleteButton = "" + public var connectedSuccessMessage = "" + public var errorSomethingHappened = "" + public var sectionHeaderNewPrinters = "" + public var connectButton = "" public var sectionHeaderActivePrinter = "" + public var title = "" + public var bluetoothHintFooter = "" enum CodingKeys: String, CodingKey { - case title - case connectButton - case sectionHeaderNewPrinters - case errorSomethingHappened - case connectedSuccessMessage - case bluetoothHintFooter case deleteButton - case sectionHeaderActivePrinter - } + case connectedSuccessMessage + case errorSomethingHappened + case sectionHeaderNewPrinters + case connectButton + case sectionHeaderActivePrinter + case title + case bluetoothHintFooter + } public override init() { super.init() } public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - connectButton = try container.decodeIfPresent(String.self, forKey: .connectButton) ?? "__connectButton" - sectionHeaderNewPrinters = try container.decodeIfPresent(String.self, forKey: .sectionHeaderNewPrinters) ?? "__sectionHeaderNewPrinters" - errorSomethingHappened = try container.decodeIfPresent(String.self, forKey: .errorSomethingHappened) ?? "__errorSomethingHappened" - connectedSuccessMessage = try container.decodeIfPresent(String.self, forKey: .connectedSuccessMessage) ?? "__connectedSuccessMessage" - bluetoothHintFooter = try container.decodeIfPresent(String.self, forKey: .bluetoothHintFooter) ?? "__bluetoothHintFooter" deleteButton = try container.decodeIfPresent(String.self, forKey: .deleteButton) ?? "__deleteButton" + connectedSuccessMessage = try container.decodeIfPresent(String.self, forKey: .connectedSuccessMessage) ?? "__connectedSuccessMessage" + errorSomethingHappened = try container.decodeIfPresent(String.self, forKey: .errorSomethingHappened) ?? "__errorSomethingHappened" + sectionHeaderNewPrinters = try container.decodeIfPresent(String.self, forKey: .sectionHeaderNewPrinters) ?? "__sectionHeaderNewPrinters" + connectButton = try container.decodeIfPresent(String.self, forKey: .connectButton) ?? "__connectButton" sectionHeaderActivePrinter = try container.decodeIfPresent(String.self, forKey: .sectionHeaderActivePrinter) ?? "__sectionHeaderActivePrinter" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + bluetoothHintFooter = try container.decodeIfPresent(String.self, forKey: .bluetoothHintFooter) ?? "__bluetoothHintFooter" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.title.stringValue: return title - case CodingKeys.connectButton.stringValue: return connectButton - case CodingKeys.sectionHeaderNewPrinters.stringValue: return sectionHeaderNewPrinters - case CodingKeys.errorSomethingHappened.stringValue: return errorSomethingHappened - case CodingKeys.connectedSuccessMessage.stringValue: return connectedSuccessMessage - case CodingKeys.bluetoothHintFooter.stringValue: return bluetoothHintFooter case CodingKeys.deleteButton.stringValue: return deleteButton + case CodingKeys.connectedSuccessMessage.stringValue: return connectedSuccessMessage + case CodingKeys.errorSomethingHappened.stringValue: return errorSomethingHappened + case CodingKeys.sectionHeaderNewPrinters.stringValue: return sectionHeaderNewPrinters + case CodingKeys.connectButton.stringValue: return connectButton case CodingKeys.sectionHeaderActivePrinter.stringValue: return sectionHeaderActivePrinter + case CodingKeys.title.stringValue: return title + case CodingKeys.bluetoothHintFooter.stringValue: return bluetoothHintFooter default: return nil } } @@ -277,39 +285,39 @@ public final class Localizations: LocalizableModel { public final class Dashboard: LocalizableSection { public var columnAcceptedEmpty = "" - public var sectionLater = "" + public var columnIncomingEmpty = "" + public var columnOutForDelivery = "" + public var columnIncoming = "" public var allOrdersButton = "" public var sectionToday = "" - public var columnDoneTodayEmpty = "" - public var columnDoneToday = "" - public var columnIncomingEmpty = "" + public var sectionTomorrow = "" + public var sectionLater = "" public var columnAccepted = "" public var columnReady = "" + public var columnDoneToday = "" + public var itemsPlural = "" public var itemsSingular = "" + public var columnDoneTodayEmpty = "" public var columnOutForDeliveryEmpty = "" - public var columnIncoming = "" - public var itemsPlural = "" - public var columnOutForDelivery = "" public var columnReadyEmpty = "" - public var sectionTomorrow = "" enum CodingKeys: String, CodingKey { case columnAcceptedEmpty - case sectionLater + case columnIncomingEmpty + case columnOutForDelivery + case columnIncoming case allOrdersButton case sectionToday - case columnDoneTodayEmpty - case columnDoneToday - case columnIncomingEmpty + case sectionTomorrow + case sectionLater case columnAccepted case columnReady + case columnDoneToday + case itemsPlural case itemsSingular + case columnDoneTodayEmpty case columnOutForDeliveryEmpty - case columnIncoming - case itemsPlural - case columnOutForDelivery case columnReadyEmpty - case sectionTomorrow } public override init() { super.init() } @@ -318,100 +326,41 @@ public final class Localizations: LocalizableModel { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) columnAcceptedEmpty = try container.decodeIfPresent(String.self, forKey: .columnAcceptedEmpty) ?? "__columnAcceptedEmpty" - sectionLater = try container.decodeIfPresent(String.self, forKey: .sectionLater) ?? "__sectionLater" + columnIncomingEmpty = try container.decodeIfPresent(String.self, forKey: .columnIncomingEmpty) ?? "__columnIncomingEmpty" + columnOutForDelivery = try container.decodeIfPresent(String.self, forKey: .columnOutForDelivery) ?? "__columnOutForDelivery" + columnIncoming = try container.decodeIfPresent(String.self, forKey: .columnIncoming) ?? "__columnIncoming" allOrdersButton = try container.decodeIfPresent(String.self, forKey: .allOrdersButton) ?? "__allOrdersButton" sectionToday = try container.decodeIfPresent(String.self, forKey: .sectionToday) ?? "__sectionToday" - columnDoneTodayEmpty = try container.decodeIfPresent(String.self, forKey: .columnDoneTodayEmpty) ?? "__columnDoneTodayEmpty" - columnDoneToday = try container.decodeIfPresent(String.self, forKey: .columnDoneToday) ?? "__columnDoneToday" - columnIncomingEmpty = try container.decodeIfPresent(String.self, forKey: .columnIncomingEmpty) ?? "__columnIncomingEmpty" + sectionTomorrow = try container.decodeIfPresent(String.self, forKey: .sectionTomorrow) ?? "__sectionTomorrow" + sectionLater = try container.decodeIfPresent(String.self, forKey: .sectionLater) ?? "__sectionLater" columnAccepted = try container.decodeIfPresent(String.self, forKey: .columnAccepted) ?? "__columnAccepted" columnReady = try container.decodeIfPresent(String.self, forKey: .columnReady) ?? "__columnReady" + columnDoneToday = try container.decodeIfPresent(String.self, forKey: .columnDoneToday) ?? "__columnDoneToday" + itemsPlural = try container.decodeIfPresent(String.self, forKey: .itemsPlural) ?? "__itemsPlural" itemsSingular = try container.decodeIfPresent(String.self, forKey: .itemsSingular) ?? "__itemsSingular" + columnDoneTodayEmpty = try container.decodeIfPresent(String.self, forKey: .columnDoneTodayEmpty) ?? "__columnDoneTodayEmpty" columnOutForDeliveryEmpty = try container.decodeIfPresent(String.self, forKey: .columnOutForDeliveryEmpty) ?? "__columnOutForDeliveryEmpty" - columnIncoming = try container.decodeIfPresent(String.self, forKey: .columnIncoming) ?? "__columnIncoming" - itemsPlural = try container.decodeIfPresent(String.self, forKey: .itemsPlural) ?? "__itemsPlural" - columnOutForDelivery = try container.decodeIfPresent(String.self, forKey: .columnOutForDelivery) ?? "__columnOutForDelivery" columnReadyEmpty = try container.decodeIfPresent(String.self, forKey: .columnReadyEmpty) ?? "__columnReadyEmpty" - sectionTomorrow = try container.decodeIfPresent(String.self, forKey: .sectionTomorrow) ?? "__sectionTomorrow" } public override subscript(key: String) -> String? { switch key { case CodingKeys.columnAcceptedEmpty.stringValue: return columnAcceptedEmpty - case CodingKeys.sectionLater.stringValue: return sectionLater + case CodingKeys.columnIncomingEmpty.stringValue: return columnIncomingEmpty + case CodingKeys.columnOutForDelivery.stringValue: return columnOutForDelivery + case CodingKeys.columnIncoming.stringValue: return columnIncoming case CodingKeys.allOrdersButton.stringValue: return allOrdersButton case CodingKeys.sectionToday.stringValue: return sectionToday - case CodingKeys.columnDoneTodayEmpty.stringValue: return columnDoneTodayEmpty - case CodingKeys.columnDoneToday.stringValue: return columnDoneToday - case CodingKeys.columnIncomingEmpty.stringValue: return columnIncomingEmpty + case CodingKeys.sectionTomorrow.stringValue: return sectionTomorrow + case CodingKeys.sectionLater.stringValue: return sectionLater case CodingKeys.columnAccepted.stringValue: return columnAccepted case CodingKeys.columnReady.stringValue: return columnReady + case CodingKeys.columnDoneToday.stringValue: return columnDoneToday + case CodingKeys.itemsPlural.stringValue: return itemsPlural case CodingKeys.itemsSingular.stringValue: return itemsSingular + case CodingKeys.columnDoneTodayEmpty.stringValue: return columnDoneTodayEmpty case CodingKeys.columnOutForDeliveryEmpty.stringValue: return columnOutForDeliveryEmpty - case CodingKeys.columnIncoming.stringValue: return columnIncoming - case CodingKeys.itemsPlural.stringValue: return itemsPlural - case CodingKeys.columnOutForDelivery.stringValue: return columnOutForDelivery case CodingKeys.columnReadyEmpty.stringValue: return columnReadyEmpty - case CodingKeys.sectionTomorrow.stringValue: return sectionTomorrow - default: return nil - } - } - } - - public final class Login: LocalizableSection { - public var appVersionPrefix = "" - public var emailPlaceholder = "" - public var appName = "" - public var resetPasswordMessage = "" - public var loginButton = "" - public var title = "" - public var errorInvalidCredentials = "" - public var emailHeader = "" - public var passwordPlaceholder = "" - public var passwordHeader = "" - - enum CodingKeys: String, CodingKey { - case appVersionPrefix - case emailPlaceholder - case appName - case resetPasswordMessage - case loginButton - case title - case errorInvalidCredentials - case emailHeader - case passwordPlaceholder - case passwordHeader - } - - public override init() { super.init() } - - public required init(from decoder: Decoder) throws { - super.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - appVersionPrefix = try container.decodeIfPresent(String.self, forKey: .appVersionPrefix) ?? "__appVersionPrefix" - emailPlaceholder = try container.decodeIfPresent(String.self, forKey: .emailPlaceholder) ?? "__emailPlaceholder" - appName = try container.decodeIfPresent(String.self, forKey: .appName) ?? "__appName" - resetPasswordMessage = try container.decodeIfPresent(String.self, forKey: .resetPasswordMessage) ?? "__resetPasswordMessage" - loginButton = try container.decodeIfPresent(String.self, forKey: .loginButton) ?? "__loginButton" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - errorInvalidCredentials = try container.decodeIfPresent(String.self, forKey: .errorInvalidCredentials) ?? "__errorInvalidCredentials" - emailHeader = try container.decodeIfPresent(String.self, forKey: .emailHeader) ?? "__emailHeader" - passwordPlaceholder = try container.decodeIfPresent(String.self, forKey: .passwordPlaceholder) ?? "__passwordPlaceholder" - passwordHeader = try container.decodeIfPresent(String.self, forKey: .passwordHeader) ?? "__passwordHeader" - } - - public override subscript(key: String) -> String? { - switch key { - case CodingKeys.appVersionPrefix.stringValue: return appVersionPrefix - case CodingKeys.emailPlaceholder.stringValue: return emailPlaceholder - case CodingKeys.appName.stringValue: return appName - case CodingKeys.resetPasswordMessage.stringValue: return resetPasswordMessage - case CodingKeys.loginButton.stringValue: return loginButton - case CodingKeys.title.stringValue: return title - case CodingKeys.errorInvalidCredentials.stringValue: return errorInvalidCredentials - case CodingKeys.emailHeader.stringValue: return emailHeader - case CodingKeys.passwordPlaceholder.stringValue: return passwordPlaceholder - case CodingKeys.passwordHeader.stringValue: return passwordHeader default: return nil } } @@ -419,33 +368,33 @@ public final class Localizations: LocalizableModel { public final class SearchOrders: LocalizableSection { public var statusNew = "" - public var customerNameHeader = "" - public var orderNumberHeader = "" - public var statusCompleted = "" - public var searchfieldPlaceholder = "" public var statusRejected = "" - public var title = "" + public var customerNameHeader = "" + public var orderDateHeader = "" + public var emptyMessage = "" public var orderStatusHeader = "" - public var statusAccepted = "" + public var searchfieldPlaceholder = "" public var statusReady = "" - public var emptyMessage = "" - public var orderDateHeader = "" + public var statusCompleted = "" + public var orderNumberHeader = "" + public var title = "" public var statusShipped = "" + public var statusAccepted = "" enum CodingKeys: String, CodingKey { case statusNew - case customerNameHeader - case orderNumberHeader - case statusCompleted - case searchfieldPlaceholder case statusRejected - case title + case customerNameHeader + case orderDateHeader + case emptyMessage case orderStatusHeader - case statusAccepted + case searchfieldPlaceholder case statusReady - case emptyMessage - case orderDateHeader + case statusCompleted + case orderNumberHeader + case title case statusShipped + case statusAccepted } public override init() { super.init() } @@ -454,45 +403,53 @@ public final class Localizations: LocalizableModel { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) statusNew = try container.decodeIfPresent(String.self, forKey: .statusNew) ?? "__statusNew" - customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" - orderNumberHeader = try container.decodeIfPresent(String.self, forKey: .orderNumberHeader) ?? "__orderNumberHeader" - statusCompleted = try container.decodeIfPresent(String.self, forKey: .statusCompleted) ?? "__statusCompleted" - searchfieldPlaceholder = try container.decodeIfPresent(String.self, forKey: .searchfieldPlaceholder) ?? "__searchfieldPlaceholder" statusRejected = try container.decodeIfPresent(String.self, forKey: .statusRejected) ?? "__statusRejected" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" + orderDateHeader = try container.decodeIfPresent(String.self, forKey: .orderDateHeader) ?? "__orderDateHeader" + emptyMessage = try container.decodeIfPresent(String.self, forKey: .emptyMessage) ?? "__emptyMessage" orderStatusHeader = try container.decodeIfPresent(String.self, forKey: .orderStatusHeader) ?? "__orderStatusHeader" - statusAccepted = try container.decodeIfPresent(String.self, forKey: .statusAccepted) ?? "__statusAccepted" + searchfieldPlaceholder = try container.decodeIfPresent(String.self, forKey: .searchfieldPlaceholder) ?? "__searchfieldPlaceholder" statusReady = try container.decodeIfPresent(String.self, forKey: .statusReady) ?? "__statusReady" - emptyMessage = try container.decodeIfPresent(String.self, forKey: .emptyMessage) ?? "__emptyMessage" - orderDateHeader = try container.decodeIfPresent(String.self, forKey: .orderDateHeader) ?? "__orderDateHeader" + statusCompleted = try container.decodeIfPresent(String.self, forKey: .statusCompleted) ?? "__statusCompleted" + orderNumberHeader = try container.decodeIfPresent(String.self, forKey: .orderNumberHeader) ?? "__orderNumberHeader" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" statusShipped = try container.decodeIfPresent(String.self, forKey: .statusShipped) ?? "__statusShipped" + statusAccepted = try container.decodeIfPresent(String.self, forKey: .statusAccepted) ?? "__statusAccepted" } public override subscript(key: String) -> String? { switch key { case CodingKeys.statusNew.stringValue: return statusNew - case CodingKeys.customerNameHeader.stringValue: return customerNameHeader - case CodingKeys.orderNumberHeader.stringValue: return orderNumberHeader - case CodingKeys.statusCompleted.stringValue: return statusCompleted - case CodingKeys.searchfieldPlaceholder.stringValue: return searchfieldPlaceholder case CodingKeys.statusRejected.stringValue: return statusRejected - case CodingKeys.title.stringValue: return title + case CodingKeys.customerNameHeader.stringValue: return customerNameHeader + case CodingKeys.orderDateHeader.stringValue: return orderDateHeader + case CodingKeys.emptyMessage.stringValue: return emptyMessage case CodingKeys.orderStatusHeader.stringValue: return orderStatusHeader - case CodingKeys.statusAccepted.stringValue: return statusAccepted + case CodingKeys.searchfieldPlaceholder.stringValue: return searchfieldPlaceholder case CodingKeys.statusReady.stringValue: return statusReady - case CodingKeys.emptyMessage.stringValue: return emptyMessage - case CodingKeys.orderDateHeader.stringValue: return orderDateHeader + case CodingKeys.statusCompleted.stringValue: return statusCompleted + case CodingKeys.orderNumberHeader.stringValue: return orderNumberHeader + case CodingKeys.title.stringValue: return title case CodingKeys.statusShipped.stringValue: return statusShipped + case CodingKeys.statusAccepted.stringValue: return statusAccepted default: return nil } } } - public final class OrderStatus: LocalizableSection { - public var accepted = "" + public final class Error: LocalizableSection { + public var errorTitle = "" + public var unknownError = "" + public var connectionError = "" + public var serverError = "" + public var authenticationError = "" enum CodingKeys: String, CodingKey { - case accepted + case errorTitle + case unknownError + case connectionError + case serverError + case authenticationError } public override init() { super.init() } @@ -500,90 +457,247 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - accepted = try container.decodeIfPresent(String.self, forKey: .accepted) ?? "__accepted" + errorTitle = try container.decodeIfPresent(String.self, forKey: .errorTitle) ?? "__errorTitle" + unknownError = try container.decodeIfPresent(String.self, forKey: .unknownError) ?? "__unknownError" + connectionError = try container.decodeIfPresent(String.self, forKey: .connectionError) ?? "__connectionError" + serverError = try container.decodeIfPresent(String.self, forKey: .serverError) ?? "__serverError" + authenticationError = try container.decodeIfPresent(String.self, forKey: .authenticationError) ?? "__authenticationError" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.accepted.stringValue: return accepted + case CodingKeys.errorTitle.stringValue: return errorTitle + case CodingKeys.unknownError.stringValue: return unknownError + case CodingKeys.connectionError.stringValue: return connectionError + case CodingKeys.serverError.stringValue: return serverError + case CodingKeys.authenticationError.stringValue: return authenticationError default: return nil } } } - public final class OrderDetails: LocalizableSection { - public var printButton = "" - public var sectionHeaderTakeout = "" - public var sectionSubheaderColdProducts = "" - public var infoPaymentType = "" - public var sectionHeaderWarmProducts = "" - public var infoMobilePhone = "" - public var sectionHeaderCustomerInfo = "" - public var today = "" - public var errorCouldNotFetchProducts = "" - public var deliveryTypeHeader = "" - public var pickedUpButton = "" - public var readyButton = "" - public var infoCustomerName = "" - public var customerNoteHeader = "" + public final class Units: LocalizableSection { + public var dlt = "" + public var d70 = "" + public var mlt = "" + public var ltr = "" + public var e14 = "" + public var h87 = "" + public var kgm = "" + public var grm = "" + public var cmt = "" + public var clt = "" + + enum CodingKeys: String, CodingKey { + case dlt + case d70 + case mlt + case ltr + case e14 + case h87 + case kgm + case grm + case cmt + case clt + } + + public override init() { super.init() } + + public required init(from decoder: Decoder) throws { + super.init() + let container = try decoder.container(keyedBy: CodingKeys.self) + dlt = try container.decodeIfPresent(String.self, forKey: .dlt) ?? "__dlt" + d70 = try container.decodeIfPresent(String.self, forKey: .d70) ?? "__d70" + mlt = try container.decodeIfPresent(String.self, forKey: .mlt) ?? "__mlt" + ltr = try container.decodeIfPresent(String.self, forKey: .ltr) ?? "__ltr" + e14 = try container.decodeIfPresent(String.self, forKey: .e14) ?? "__e14" + h87 = try container.decodeIfPresent(String.self, forKey: .h87) ?? "__h87" + kgm = try container.decodeIfPresent(String.self, forKey: .kgm) ?? "__kgm" + grm = try container.decodeIfPresent(String.self, forKey: .grm) ?? "__grm" + cmt = try container.decodeIfPresent(String.self, forKey: .cmt) ?? "__cmt" + clt = try container.decodeIfPresent(String.self, forKey: .clt) ?? "__clt" + } + + public override subscript(key: String) -> String? { + switch key { + case CodingKeys.dlt.stringValue: return dlt + case CodingKeys.d70.stringValue: return d70 + case CodingKeys.mlt.stringValue: return mlt + case CodingKeys.ltr.stringValue: return ltr + case CodingKeys.e14.stringValue: return e14 + case CodingKeys.h87.stringValue: return h87 + case CodingKeys.kgm.stringValue: return kgm + case CodingKeys.grm.stringValue: return grm + case CodingKeys.cmt.stringValue: return cmt + case CodingKeys.clt.stringValue: return clt + default: return nil + } + } + } + + public final class DeliveryType: LocalizableSection { + public var delivery = "" + public var collect = "" + + enum CodingKeys: String, CodingKey { + case delivery + case collect + } + + public override init() { super.init() } + + public required init(from decoder: Decoder) throws { + super.init() + let container = try decoder.container(keyedBy: CodingKeys.self) + delivery = try container.decodeIfPresent(String.self, forKey: .delivery) ?? "__delivery" + collect = try container.decodeIfPresent(String.self, forKey: .collect) ?? "__collect" + } + + public override subscript(key: String) -> String? { + switch key { + case CodingKeys.delivery.stringValue: return delivery + case CodingKeys.collect.stringValue: return collect + default: return nil + } + } + } + + public final class Settings: LocalizableSection { + public var selectPrinterButton = "" + public var closeButton = "" + public var printerHeader = "" + public var logOutAlertConfirm = "" + public var logOutAlertCancel = "" + public var logOutButton = "" + public var usernameHeader = "" + public var appVersionHeader = "" + public var logoutAlertTitle = "" + public var logOutAlertMessage = "" + public var title = "" + + enum CodingKeys: String, CodingKey { + case selectPrinterButton + case closeButton + case printerHeader + case logOutAlertConfirm + case logOutAlertCancel + case logOutButton + case usernameHeader + case appVersionHeader + case logoutAlertTitle + case logOutAlertMessage + case title + } + + public override init() { super.init() } + + public required init(from decoder: Decoder) throws { + super.init() + let container = try decoder.container(keyedBy: CodingKeys.self) + selectPrinterButton = try container.decodeIfPresent(String.self, forKey: .selectPrinterButton) ?? "__selectPrinterButton" + closeButton = try container.decodeIfPresent(String.self, forKey: .closeButton) ?? "__closeButton" + printerHeader = try container.decodeIfPresent(String.self, forKey: .printerHeader) ?? "__printerHeader" + logOutAlertConfirm = try container.decodeIfPresent(String.self, forKey: .logOutAlertConfirm) ?? "__logOutAlertConfirm" + logOutAlertCancel = try container.decodeIfPresent(String.self, forKey: .logOutAlertCancel) ?? "__logOutAlertCancel" + logOutButton = try container.decodeIfPresent(String.self, forKey: .logOutButton) ?? "__logOutButton" + usernameHeader = try container.decodeIfPresent(String.self, forKey: .usernameHeader) ?? "__usernameHeader" + appVersionHeader = try container.decodeIfPresent(String.self, forKey: .appVersionHeader) ?? "__appVersionHeader" + logoutAlertTitle = try container.decodeIfPresent(String.self, forKey: .logoutAlertTitle) ?? "__logoutAlertTitle" + logOutAlertMessage = try container.decodeIfPresent(String.self, forKey: .logOutAlertMessage) ?? "__logOutAlertMessage" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + } + + public override subscript(key: String) -> String? { + switch key { + case CodingKeys.selectPrinterButton.stringValue: return selectPrinterButton + case CodingKeys.closeButton.stringValue: return closeButton + case CodingKeys.printerHeader.stringValue: return printerHeader + case CodingKeys.logOutAlertConfirm.stringValue: return logOutAlertConfirm + case CodingKeys.logOutAlertCancel.stringValue: return logOutAlertCancel + case CodingKeys.logOutButton.stringValue: return logOutButton + case CodingKeys.usernameHeader.stringValue: return usernameHeader + case CodingKeys.appVersionHeader.stringValue: return appVersionHeader + case CodingKeys.logoutAlertTitle.stringValue: return logoutAlertTitle + case CodingKeys.logOutAlertMessage.stringValue: return logOutAlertMessage + case CodingKeys.title.stringValue: return title + default: return nil + } + } + } + + public final class OrderDetails: LocalizableSection { public var pickupTimeHeader = "" + public var customerNoteHeader = "" + public var aPiece = "" + public var rejectOrderAlertCancel = "" + public var infoAddress = "" + public var rejectOrderAlertTitle = "" + public var sectionHeaderWarmProducts = "" public var infoEmail = "" - public var rejectButton = "" public var infoTakeOutShopID = "" - public var infoOrderTime = "" - public var underPreparationButton = "" - public var infoTakeoutPhone = "" - public var infoDeliveryTime = "" - public var completedBanner = "" - public var sectionHeaderOtherProducts = "" - public var rejectOrderAlertTitle = "" + public var outForDeliveryButton = "" + public var deliveryTypeHeader = "" public var includeCutlery = "" - public var rejectOrderAlertConfirm = "" - public var rejectOrderAlertCancel = "" - public var aPiece = "" + public var errorCouldNotFetchProducts = "" + public var infoMobilePhone = "" + public var sectionHeaderOtherProducts = "" + public var underPreparationButton = "" + public var infoOrderTime = "" public var sectionHeaderColdProducts = "" - public var sectionHeaderOrderStatus = "" - public var infoAddress = "" + public var sectionSubheaderColdProducts = "" + public var rejectOrderAlertConfirm = "" public var rejectOrderAlertMessage = "" + public var sectionHeaderOrderStatus = "" + public var completedBanner = "" public var errorStatusUpdateFailed = "" - public var outForDeliveryButton = "" + public var printButton = "" + public var infoTakeoutPhone = "" + public var today = "" + public var readyButton = "" + public var sectionHeaderCustomerInfo = "" + public var pickedUpButton = "" + public var sectionHeaderTakeout = "" + public var rejectButton = "" + public var infoPaymentType = "" + public var infoDeliveryTime = "" + public var infoCustomerName = "" enum CodingKeys: String, CodingKey { - case printButton - case sectionHeaderTakeout - case sectionSubheaderColdProducts - case infoPaymentType - case sectionHeaderWarmProducts - case infoMobilePhone - case sectionHeaderCustomerInfo - case today - case errorCouldNotFetchProducts - case deliveryTypeHeader - case pickedUpButton - case readyButton - case infoCustomerName - case customerNoteHeader case pickupTimeHeader + case customerNoteHeader + case aPiece + case rejectOrderAlertCancel + case infoAddress + case rejectOrderAlertTitle + case sectionHeaderWarmProducts case infoEmail - case rejectButton case infoTakeOutShopID - case infoOrderTime - case underPreparationButton - case infoTakeoutPhone - case infoDeliveryTime - case completedBanner - case sectionHeaderOtherProducts - case rejectOrderAlertTitle + case outForDeliveryButton + case deliveryTypeHeader case includeCutlery - case rejectOrderAlertConfirm - case rejectOrderAlertCancel - case aPiece + case errorCouldNotFetchProducts + case infoMobilePhone + case sectionHeaderOtherProducts + case underPreparationButton + case infoOrderTime case sectionHeaderColdProducts - case sectionHeaderOrderStatus - case infoAddress + case sectionSubheaderColdProducts + case rejectOrderAlertConfirm case rejectOrderAlertMessage + case sectionHeaderOrderStatus + case completedBanner case errorStatusUpdateFailed - case outForDeliveryButton + case printButton + case infoTakeoutPhone + case today + case readyButton + case sectionHeaderCustomerInfo + case pickedUpButton + case sectionHeaderTakeout + case rejectButton + case infoPaymentType + case infoDeliveryTime + case infoCustomerName } public override init() { super.init() } @@ -591,106 +705,106 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - printButton = try container.decodeIfPresent(String.self, forKey: .printButton) ?? "__printButton" - sectionHeaderTakeout = try container.decodeIfPresent(String.self, forKey: .sectionHeaderTakeout) ?? "__sectionHeaderTakeout" - sectionSubheaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionSubheaderColdProducts) ?? "__sectionSubheaderColdProducts" - infoPaymentType = try container.decodeIfPresent(String.self, forKey: .infoPaymentType) ?? "__infoPaymentType" - sectionHeaderWarmProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderWarmProducts) ?? "__sectionHeaderWarmProducts" - infoMobilePhone = try container.decodeIfPresent(String.self, forKey: .infoMobilePhone) ?? "__infoMobilePhone" - sectionHeaderCustomerInfo = try container.decodeIfPresent(String.self, forKey: .sectionHeaderCustomerInfo) ?? "__sectionHeaderCustomerInfo" - today = try container.decodeIfPresent(String.self, forKey: .today) ?? "__today" - errorCouldNotFetchProducts = try container.decodeIfPresent(String.self, forKey: .errorCouldNotFetchProducts) ?? "__errorCouldNotFetchProducts" - deliveryTypeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTypeHeader) ?? "__deliveryTypeHeader" - pickedUpButton = try container.decodeIfPresent(String.self, forKey: .pickedUpButton) ?? "__pickedUpButton" - readyButton = try container.decodeIfPresent(String.self, forKey: .readyButton) ?? "__readyButton" - infoCustomerName = try container.decodeIfPresent(String.self, forKey: .infoCustomerName) ?? "__infoCustomerName" - customerNoteHeader = try container.decodeIfPresent(String.self, forKey: .customerNoteHeader) ?? "__customerNoteHeader" pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" + customerNoteHeader = try container.decodeIfPresent(String.self, forKey: .customerNoteHeader) ?? "__customerNoteHeader" + aPiece = try container.decodeIfPresent(String.self, forKey: .aPiece) ?? "__aPiece" + rejectOrderAlertCancel = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertCancel) ?? "__rejectOrderAlertCancel" + infoAddress = try container.decodeIfPresent(String.self, forKey: .infoAddress) ?? "__infoAddress" + rejectOrderAlertTitle = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertTitle) ?? "__rejectOrderAlertTitle" + sectionHeaderWarmProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderWarmProducts) ?? "__sectionHeaderWarmProducts" infoEmail = try container.decodeIfPresent(String.self, forKey: .infoEmail) ?? "__infoEmail" - rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" infoTakeOutShopID = try container.decodeIfPresent(String.self, forKey: .infoTakeOutShopID) ?? "__infoTakeOutShopID" - infoOrderTime = try container.decodeIfPresent(String.self, forKey: .infoOrderTime) ?? "__infoOrderTime" - underPreparationButton = try container.decodeIfPresent(String.self, forKey: .underPreparationButton) ?? "__underPreparationButton" - infoTakeoutPhone = try container.decodeIfPresent(String.self, forKey: .infoTakeoutPhone) ?? "__infoTakeoutPhone" - infoDeliveryTime = try container.decodeIfPresent(String.self, forKey: .infoDeliveryTime) ?? "__infoDeliveryTime" - completedBanner = try container.decodeIfPresent(String.self, forKey: .completedBanner) ?? "__completedBanner" - sectionHeaderOtherProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOtherProducts) ?? "__sectionHeaderOtherProducts" - rejectOrderAlertTitle = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertTitle) ?? "__rejectOrderAlertTitle" + outForDeliveryButton = try container.decodeIfPresent(String.self, forKey: .outForDeliveryButton) ?? "__outForDeliveryButton" + deliveryTypeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTypeHeader) ?? "__deliveryTypeHeader" includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" - rejectOrderAlertConfirm = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertConfirm) ?? "__rejectOrderAlertConfirm" - rejectOrderAlertCancel = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertCancel) ?? "__rejectOrderAlertCancel" - aPiece = try container.decodeIfPresent(String.self, forKey: .aPiece) ?? "__aPiece" + errorCouldNotFetchProducts = try container.decodeIfPresent(String.self, forKey: .errorCouldNotFetchProducts) ?? "__errorCouldNotFetchProducts" + infoMobilePhone = try container.decodeIfPresent(String.self, forKey: .infoMobilePhone) ?? "__infoMobilePhone" + sectionHeaderOtherProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOtherProducts) ?? "__sectionHeaderOtherProducts" + underPreparationButton = try container.decodeIfPresent(String.self, forKey: .underPreparationButton) ?? "__underPreparationButton" + infoOrderTime = try container.decodeIfPresent(String.self, forKey: .infoOrderTime) ?? "__infoOrderTime" sectionHeaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderColdProducts) ?? "__sectionHeaderColdProducts" - sectionHeaderOrderStatus = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOrderStatus) ?? "__sectionHeaderOrderStatus" - infoAddress = try container.decodeIfPresent(String.self, forKey: .infoAddress) ?? "__infoAddress" + sectionSubheaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionSubheaderColdProducts) ?? "__sectionSubheaderColdProducts" + rejectOrderAlertConfirm = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertConfirm) ?? "__rejectOrderAlertConfirm" rejectOrderAlertMessage = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertMessage) ?? "__rejectOrderAlertMessage" + sectionHeaderOrderStatus = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOrderStatus) ?? "__sectionHeaderOrderStatus" + completedBanner = try container.decodeIfPresent(String.self, forKey: .completedBanner) ?? "__completedBanner" errorStatusUpdateFailed = try container.decodeIfPresent(String.self, forKey: .errorStatusUpdateFailed) ?? "__errorStatusUpdateFailed" - outForDeliveryButton = try container.decodeIfPresent(String.self, forKey: .outForDeliveryButton) ?? "__outForDeliveryButton" + printButton = try container.decodeIfPresent(String.self, forKey: .printButton) ?? "__printButton" + infoTakeoutPhone = try container.decodeIfPresent(String.self, forKey: .infoTakeoutPhone) ?? "__infoTakeoutPhone" + today = try container.decodeIfPresent(String.self, forKey: .today) ?? "__today" + readyButton = try container.decodeIfPresent(String.self, forKey: .readyButton) ?? "__readyButton" + sectionHeaderCustomerInfo = try container.decodeIfPresent(String.self, forKey: .sectionHeaderCustomerInfo) ?? "__sectionHeaderCustomerInfo" + pickedUpButton = try container.decodeIfPresent(String.self, forKey: .pickedUpButton) ?? "__pickedUpButton" + sectionHeaderTakeout = try container.decodeIfPresent(String.self, forKey: .sectionHeaderTakeout) ?? "__sectionHeaderTakeout" + rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" + infoPaymentType = try container.decodeIfPresent(String.self, forKey: .infoPaymentType) ?? "__infoPaymentType" + infoDeliveryTime = try container.decodeIfPresent(String.self, forKey: .infoDeliveryTime) ?? "__infoDeliveryTime" + infoCustomerName = try container.decodeIfPresent(String.self, forKey: .infoCustomerName) ?? "__infoCustomerName" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.printButton.stringValue: return printButton - case CodingKeys.sectionHeaderTakeout.stringValue: return sectionHeaderTakeout - case CodingKeys.sectionSubheaderColdProducts.stringValue: return sectionSubheaderColdProducts - case CodingKeys.infoPaymentType.stringValue: return infoPaymentType - case CodingKeys.sectionHeaderWarmProducts.stringValue: return sectionHeaderWarmProducts - case CodingKeys.infoMobilePhone.stringValue: return infoMobilePhone - case CodingKeys.sectionHeaderCustomerInfo.stringValue: return sectionHeaderCustomerInfo - case CodingKeys.today.stringValue: return today - case CodingKeys.errorCouldNotFetchProducts.stringValue: return errorCouldNotFetchProducts - case CodingKeys.deliveryTypeHeader.stringValue: return deliveryTypeHeader - case CodingKeys.pickedUpButton.stringValue: return pickedUpButton - case CodingKeys.readyButton.stringValue: return readyButton - case CodingKeys.infoCustomerName.stringValue: return infoCustomerName - case CodingKeys.customerNoteHeader.stringValue: return customerNoteHeader case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader + case CodingKeys.customerNoteHeader.stringValue: return customerNoteHeader + case CodingKeys.aPiece.stringValue: return aPiece + case CodingKeys.rejectOrderAlertCancel.stringValue: return rejectOrderAlertCancel + case CodingKeys.infoAddress.stringValue: return infoAddress + case CodingKeys.rejectOrderAlertTitle.stringValue: return rejectOrderAlertTitle + case CodingKeys.sectionHeaderWarmProducts.stringValue: return sectionHeaderWarmProducts case CodingKeys.infoEmail.stringValue: return infoEmail - case CodingKeys.rejectButton.stringValue: return rejectButton case CodingKeys.infoTakeOutShopID.stringValue: return infoTakeOutShopID - case CodingKeys.infoOrderTime.stringValue: return infoOrderTime - case CodingKeys.underPreparationButton.stringValue: return underPreparationButton - case CodingKeys.infoTakeoutPhone.stringValue: return infoTakeoutPhone - case CodingKeys.infoDeliveryTime.stringValue: return infoDeliveryTime - case CodingKeys.completedBanner.stringValue: return completedBanner - case CodingKeys.sectionHeaderOtherProducts.stringValue: return sectionHeaderOtherProducts - case CodingKeys.rejectOrderAlertTitle.stringValue: return rejectOrderAlertTitle + case CodingKeys.outForDeliveryButton.stringValue: return outForDeliveryButton + case CodingKeys.deliveryTypeHeader.stringValue: return deliveryTypeHeader case CodingKeys.includeCutlery.stringValue: return includeCutlery - case CodingKeys.rejectOrderAlertConfirm.stringValue: return rejectOrderAlertConfirm - case CodingKeys.rejectOrderAlertCancel.stringValue: return rejectOrderAlertCancel - case CodingKeys.aPiece.stringValue: return aPiece + case CodingKeys.errorCouldNotFetchProducts.stringValue: return errorCouldNotFetchProducts + case CodingKeys.infoMobilePhone.stringValue: return infoMobilePhone + case CodingKeys.sectionHeaderOtherProducts.stringValue: return sectionHeaderOtherProducts + case CodingKeys.underPreparationButton.stringValue: return underPreparationButton + case CodingKeys.infoOrderTime.stringValue: return infoOrderTime case CodingKeys.sectionHeaderColdProducts.stringValue: return sectionHeaderColdProducts - case CodingKeys.sectionHeaderOrderStatus.stringValue: return sectionHeaderOrderStatus - case CodingKeys.infoAddress.stringValue: return infoAddress + case CodingKeys.sectionSubheaderColdProducts.stringValue: return sectionSubheaderColdProducts + case CodingKeys.rejectOrderAlertConfirm.stringValue: return rejectOrderAlertConfirm case CodingKeys.rejectOrderAlertMessage.stringValue: return rejectOrderAlertMessage + case CodingKeys.sectionHeaderOrderStatus.stringValue: return sectionHeaderOrderStatus + case CodingKeys.completedBanner.stringValue: return completedBanner case CodingKeys.errorStatusUpdateFailed.stringValue: return errorStatusUpdateFailed - case CodingKeys.outForDeliveryButton.stringValue: return outForDeliveryButton + case CodingKeys.printButton.stringValue: return printButton + case CodingKeys.infoTakeoutPhone.stringValue: return infoTakeoutPhone + case CodingKeys.today.stringValue: return today + case CodingKeys.readyButton.stringValue: return readyButton + case CodingKeys.sectionHeaderCustomerInfo.stringValue: return sectionHeaderCustomerInfo + case CodingKeys.pickedUpButton.stringValue: return pickedUpButton + case CodingKeys.sectionHeaderTakeout.stringValue: return sectionHeaderTakeout + case CodingKeys.rejectButton.stringValue: return rejectButton + case CodingKeys.infoPaymentType.stringValue: return infoPaymentType + case CodingKeys.infoDeliveryTime.stringValue: return infoDeliveryTime + case CodingKeys.infoCustomerName.stringValue: return infoCustomerName default: return nil } } } public final class OrderDetailNewOrderSection: LocalizableSection { - public var customerNameHeader = "" - public var rejectButton = "" - public var pickupTimeHeader = "" public var subheader = "" public var phoneNumberHeader = "" + public var customerNameHeader = "" public var acceptButton = "" - public var pickedUpInStoreAt = "" + public var rejectButton = "" public var deliveryTimeHeader = "" public var header = "" + public var pickupTimeHeader = "" + public var pickedUpInStoreAt = "" enum CodingKeys: String, CodingKey { - case customerNameHeader - case rejectButton - case pickupTimeHeader case subheader case phoneNumberHeader + case customerNameHeader case acceptButton - case pickedUpInStoreAt + case rejectButton case deliveryTimeHeader case header + case pickupTimeHeader + case pickedUpInStoreAt } public override init() { super.init() } @@ -698,150 +812,52 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" - rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" - pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" subheader = try container.decodeIfPresent(String.self, forKey: .subheader) ?? "__subheader" phoneNumberHeader = try container.decodeIfPresent(String.self, forKey: .phoneNumberHeader) ?? "__phoneNumberHeader" + customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" acceptButton = try container.decodeIfPresent(String.self, forKey: .acceptButton) ?? "__acceptButton" - pickedUpInStoreAt = try container.decodeIfPresent(String.self, forKey: .pickedUpInStoreAt) ?? "__pickedUpInStoreAt" + rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" deliveryTimeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTimeHeader) ?? "__deliveryTimeHeader" header = try container.decodeIfPresent(String.self, forKey: .header) ?? "__header" + pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" + pickedUpInStoreAt = try container.decodeIfPresent(String.self, forKey: .pickedUpInStoreAt) ?? "__pickedUpInStoreAt" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.customerNameHeader.stringValue: return customerNameHeader - case CodingKeys.rejectButton.stringValue: return rejectButton - case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader case CodingKeys.subheader.stringValue: return subheader case CodingKeys.phoneNumberHeader.stringValue: return phoneNumberHeader + case CodingKeys.customerNameHeader.stringValue: return customerNameHeader case CodingKeys.acceptButton.stringValue: return acceptButton - case CodingKeys.pickedUpInStoreAt.stringValue: return pickedUpInStoreAt + case CodingKeys.rejectButton.stringValue: return rejectButton case CodingKeys.deliveryTimeHeader.stringValue: return deliveryTimeHeader case CodingKeys.header.stringValue: return header - default: return nil - } - } - } - - public final class DeliveryType: LocalizableSection { - public var collect = "" - public var delivery = "" - - enum CodingKeys: String, CodingKey { - case collect - case delivery - } - - public override init() { super.init() } - - public required init(from decoder: Decoder) throws { - super.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - collect = try container.decodeIfPresent(String.self, forKey: .collect) ?? "__collect" - delivery = try container.decodeIfPresent(String.self, forKey: .delivery) ?? "__delivery" - } - - public override subscript(key: String) -> String? { - switch key { - case CodingKeys.collect.stringValue: return collect - case CodingKeys.delivery.stringValue: return delivery - default: return nil - } - } - } - - public final class DefaultSection: LocalizableSection { - public var skip = "" - public var save = "" - public var previous = "" - public var no = "" - public var settings = "" - public var later = "" - public var next = "" - public var ok = "" - public var back = "" - public var yes = "" - public var retry = "" - public var edit = "" - public var cancel = "" - - enum CodingKeys: String, CodingKey { - case skip - case save - case previous - case no - case settings - case later - case next - case ok - case back - case yes - case retry - case edit - case cancel - } - - public override init() { super.init() } - - public required init(from decoder: Decoder) throws { - super.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - skip = try container.decodeIfPresent(String.self, forKey: .skip) ?? "__skip" - save = try container.decodeIfPresent(String.self, forKey: .save) ?? "__save" - previous = try container.decodeIfPresent(String.self, forKey: .previous) ?? "__previous" - no = try container.decodeIfPresent(String.self, forKey: .no) ?? "__no" - settings = try container.decodeIfPresent(String.self, forKey: .settings) ?? "__settings" - later = try container.decodeIfPresent(String.self, forKey: .later) ?? "__later" - next = try container.decodeIfPresent(String.self, forKey: .next) ?? "__next" - ok = try container.decodeIfPresent(String.self, forKey: .ok) ?? "__ok" - back = try container.decodeIfPresent(String.self, forKey: .back) ?? "__back" - yes = try container.decodeIfPresent(String.self, forKey: .yes) ?? "__yes" - retry = try container.decodeIfPresent(String.self, forKey: .retry) ?? "__retry" - edit = try container.decodeIfPresent(String.self, forKey: .edit) ?? "__edit" - cancel = try container.decodeIfPresent(String.self, forKey: .cancel) ?? "__cancel" - } - - public override subscript(key: String) -> String? { - switch key { - case CodingKeys.skip.stringValue: return skip - case CodingKeys.save.stringValue: return save - case CodingKeys.previous.stringValue: return previous - case CodingKeys.no.stringValue: return no - case CodingKeys.settings.stringValue: return settings - case CodingKeys.later.stringValue: return later - case CodingKeys.next.stringValue: return next - case CodingKeys.ok.stringValue: return ok - case CodingKeys.back.stringValue: return back - case CodingKeys.yes.stringValue: return yes - case CodingKeys.retry.stringValue: return retry - case CodingKeys.edit.stringValue: return edit - case CodingKeys.cancel.stringValue: return cancel + case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader + case CodingKeys.pickedUpInStoreAt.stringValue: return pickedUpInStoreAt default: return nil } } } public final class PrinterOutput: LocalizableSection { - public var errorDeviceConnectionFailed = "" + public var orderNumber = "" + public var coldHeader = "" public var otherHeader = "" - public var includeCutlery = "" + public var errorDeviceConnectionFailed = "" public var noteHeader = "" public var warmHeader = "" + public var includeCutlery = "" public var errorNoDeviceFound = "" - public var orderNumber = "" - public var coldHeader = "" enum CodingKeys: String, CodingKey { - case errorDeviceConnectionFailed + case orderNumber + case coldHeader case otherHeader - case includeCutlery + case errorDeviceConnectionFailed case noteHeader case warmHeader + case includeCutlery case errorNoDeviceFound - case orderNumber - case coldHeader } public override init() { super.init() } @@ -849,44 +865,36 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - errorDeviceConnectionFailed = try container.decodeIfPresent(String.self, forKey: .errorDeviceConnectionFailed) ?? "__errorDeviceConnectionFailed" + orderNumber = try container.decodeIfPresent(String.self, forKey: .orderNumber) ?? "__orderNumber" + coldHeader = try container.decodeIfPresent(String.self, forKey: .coldHeader) ?? "__coldHeader" otherHeader = try container.decodeIfPresent(String.self, forKey: .otherHeader) ?? "__otherHeader" - includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" + errorDeviceConnectionFailed = try container.decodeIfPresent(String.self, forKey: .errorDeviceConnectionFailed) ?? "__errorDeviceConnectionFailed" noteHeader = try container.decodeIfPresent(String.self, forKey: .noteHeader) ?? "__noteHeader" warmHeader = try container.decodeIfPresent(String.self, forKey: .warmHeader) ?? "__warmHeader" + includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" errorNoDeviceFound = try container.decodeIfPresent(String.self, forKey: .errorNoDeviceFound) ?? "__errorNoDeviceFound" - orderNumber = try container.decodeIfPresent(String.self, forKey: .orderNumber) ?? "__orderNumber" - coldHeader = try container.decodeIfPresent(String.self, forKey: .coldHeader) ?? "__coldHeader" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.errorDeviceConnectionFailed.stringValue: return errorDeviceConnectionFailed + case CodingKeys.orderNumber.stringValue: return orderNumber + case CodingKeys.coldHeader.stringValue: return coldHeader case CodingKeys.otherHeader.stringValue: return otherHeader - case CodingKeys.includeCutlery.stringValue: return includeCutlery + case CodingKeys.errorDeviceConnectionFailed.stringValue: return errorDeviceConnectionFailed case CodingKeys.noteHeader.stringValue: return noteHeader case CodingKeys.warmHeader.stringValue: return warmHeader + case CodingKeys.includeCutlery.stringValue: return includeCutlery case CodingKeys.errorNoDeviceFound.stringValue: return errorNoDeviceFound - case CodingKeys.orderNumber.stringValue: return orderNumber - case CodingKeys.coldHeader.stringValue: return coldHeader default: return nil } } } - public final class Error: LocalizableSection { - public var connectionError = "" - public var serverError = "" - public var authenticationError = "" - public var errorTitle = "" - public var unknownError = "" + public final class OrderStatus: LocalizableSection { + public var accepted = "" enum CodingKeys: String, CodingKey { - case connectionError - case serverError - case authenticationError - case errorTitle - case unknownError + case accepted } public override init() { super.init() } @@ -894,20 +902,12 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - connectionError = try container.decodeIfPresent(String.self, forKey: .connectionError) ?? "__connectionError" - serverError = try container.decodeIfPresent(String.self, forKey: .serverError) ?? "__serverError" - authenticationError = try container.decodeIfPresent(String.self, forKey: .authenticationError) ?? "__authenticationError" - errorTitle = try container.decodeIfPresent(String.self, forKey: .errorTitle) ?? "__errorTitle" - unknownError = try container.decodeIfPresent(String.self, forKey: .unknownError) ?? "__unknownError" + accepted = try container.decodeIfPresent(String.self, forKey: .accepted) ?? "__accepted" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.connectionError.stringValue: return connectionError - case CodingKeys.serverError.stringValue: return serverError - case CodingKeys.authenticationError.stringValue: return authenticationError - case CodingKeys.errorTitle.stringValue: return errorTitle - case CodingKeys.unknownError.stringValue: return unknownError + case CodingKeys.accepted.stringValue: return accepted default: return nil } } diff --git a/Modules/Sources/Localizations/NStackAccessor.swift b/Modules/Sources/Localizations/NStackAccessor.swift index 70b6d54..6cce1c1 100644 --- a/Modules/Sources/Localizations/NStackAccessor.swift +++ b/Modules/Sources/Localizations/NStackAccessor.swift @@ -8,10 +8,14 @@ import Foundation import NStackSDK -public func startNStackSDK(appId: String, restAPIKey: String) -> ObservableLocalizations { +public func startNStackSDK( + appId: String, + restAPIKey: String, + environment: NStackSDK.Configuration.NStackEnvironment +) -> ObservableLocalizations { let config = NStackSDK.Configuration( appId: appId, restAPIKey: restAPIKey, localizationClass: Localizations.self, - environment: .debug + environment: environment ) NStack.start(configuration: config, launchOptions: nil) diff --git a/Modules/Sources/Localizations/ObservableLocalizations.swift b/Modules/Sources/Localizations/ObservableLocalizations.swift index a52c88a..478ace2 100644 --- a/Modules/Sources/Localizations/ObservableLocalizations.swift +++ b/Modules/Sources/Localizations/ObservableLocalizations.swift @@ -32,6 +32,10 @@ extension Localizations { "Localizations_da-DK", in: .myModule) } +extension ObservableLocalizations { + public static var bundled = ObservableLocalizations(.bundled) +} + class CurrentBundleFinder {} extension Foundation.Bundle { static var myModule: Bundle = { diff --git a/Modules/Sources/LoginFeature/DeveloperScreen.swift b/Modules/Sources/LoginFeature/DeveloperScreen.swift index 2b86238..079a0ee 100644 --- a/Modules/Sources/LoginFeature/DeveloperScreen.swift +++ b/Modules/Sources/LoginFeature/DeveloperScreen.swift @@ -1,16 +1,15 @@ import APIClient +import Dependencies import SwiftUI struct DeveloperScreen: View { init( - apiClient: APIClient ) { - self.apiClient = apiClient self.selectedURL = apiClient.currentBaseURL() } - let apiClient: APIClient + @Dependency(\.apiClient) var apiClient @Environment(\.apiEnvironments) var apiEnvironments: [APIClient.APIEnvironment] @State var selectedURL: URL = URL(string: ":")! diff --git a/Modules/Sources/LoginFeature/LoginEnvironment.swift b/Modules/Sources/LoginFeature/LoginEnvironment.swift deleted file mode 100644 index 60ed3bb..0000000 --- a/Modules/Sources/LoginFeature/LoginEnvironment.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// File.swift -// -// -// Created by Nicolai Harbo on 20/04/2022. -// - -import APIClient -import AppVersion -import CombineSchedulers -import Localizations - -public struct LoginEnvironment { - - var mainQueue: AnySchedulerOf - var apiClient: APIClient - var date: () -> Date - var calendar: Calendar - var localizations: ObservableLocalizations - var appVersion: AppVersion - - public init( - mainQueue: AnySchedulerOf, - apiClient: APIClient, - date: @escaping () -> Date, - calendar: Calendar, - localizations: ObservableLocalizations, - appVersion: AppVersion - ) { - self.mainQueue = mainQueue - self.apiClient = apiClient - self.date = date - self.calendar = calendar - self.localizations = localizations - self.appVersion = appVersion - } -} diff --git a/Modules/Sources/LoginFeature/LoginView.swift b/Modules/Sources/LoginFeature/LoginView.swift index f5608d4..9ffeec1 100644 --- a/Modules/Sources/LoginFeature/LoginView.swift +++ b/Modules/Sources/LoginFeature/LoginView.swift @@ -87,9 +87,7 @@ public struct LoginView: View { .shadow(color: .black.opacity(0.15), radius: 2, x: 0, y: 1) ) .sheet(isPresented: $isShowingDeveloperScreen, onDismiss: nil) { - DeveloperScreen( - apiClient: viewModel.environment.apiClient - ) + DeveloperScreen() } .alert(unwrapping: $viewModel.route, case: /LoginViewModel.Route.alert) } @@ -104,19 +102,11 @@ public struct LoginView: View { static var previews: some View { LoginView( viewModel: .init( - onSuccess: { _, _ in }, - environment: .init( - mainQueue: .immediate, - apiClient: .mock, - date: Date.init, - calendar: .init(identifier: .gregorian), - localizations: .init(.bundled), - appVersion: .noop - ) + onSuccess: { _, _ in } ) ) .registerFonts() - .environmentObject(ObservableLocalizations.init(.bundled)) + .environmentObject(ObservableLocalizations.bundled) } } #endif diff --git a/Modules/Sources/LoginFeature/LoginViewModel.swift b/Modules/Sources/LoginFeature/LoginViewModel.swift index a4702a1..b7e0b26 100644 --- a/Modules/Sources/LoginFeature/LoginViewModel.swift +++ b/Modules/Sources/LoginFeature/LoginViewModel.swift @@ -6,14 +6,19 @@ // import APIClient +import AppVersion import Combine +import Dependencies import Model import Style public class LoginViewModel: ObservableObject { - var environment: LoginEnvironment var onSuccess: (APITokensEnvelope, Username) -> Void + + @Dependency(\.appVersion) var appVersion + @Dependency(\.apiClient) var apiClient + @Dependency(\.localizations) var localizations enum Route { case alert(AlertState) @@ -22,19 +27,17 @@ public class LoginViewModel: ObservableObject { @Published var email: String = "" @Published var password: String = "" - @Published var appVersion: String = "" + @Published var appVersionString: String = "" @Published var isAPICallInFlight = false var loginCancellable: AnyCancellable? var cancellables: Set = [] public init( - onSuccess: @escaping (APITokensEnvelope, Username) -> Void, - environment: LoginEnvironment + onSuccess: @escaping (APITokensEnvelope, Username) -> Void ) { - self.environment = environment self.onSuccess = onSuccess - appVersion = "\(environment.appVersion.version())(\(environment.appVersion.build()))" + appVersionString = "\(appVersion.version())(\(appVersion.build()))" } /// Simple heuristics for email pattern @@ -45,30 +48,52 @@ public class LoginViewModel: ObservableObject { func loginButtonTapped() { isAPICallInFlight = true - loginCancellable = environment.apiClient.authenticate( - Username(rawValue: email.trimmingCharacters(in: .whitespacesAndNewlines)), - Password(rawValue: password.trimmingCharacters(in: .whitespacesAndNewlines)) - ) - .receive(on: environment.mainQueue, options: nil) - .sink( - receiveCompletion: { [weak self, environment] in - if case .failure(let error) = $0 { - self?.route = .alert( - .withTitleAndMessage( - title: environment.localizations.error.errorTitle, - message: error.errorCode == "401" - ? environment.localizations.login.errorInvalidCredentials - : environment.localizations.error.serverError, - action1: .primary( - title: environment.localizations.defaultSection.ok.uppercased(), - action: { self?.route = nil }) - ) + Task { + do { + let token = try await apiClient.authenticate( + Username(rawValue: email.trimmingCharacters(in: .whitespacesAndNewlines)), + Password(rawValue: password.trimmingCharacters(in: .whitespacesAndNewlines)) + ) + onSuccess(token, .init(rawValue: email)) + } catch let error as APIError { + route = .alert( + .withTitleAndMessage( + title: localizations.error.errorTitle, + message: error.errorCode == "401" + ? localizations.login.errorInvalidCredentials + : localizations.error.serverError, + action1: .primary( + title: localizations.defaultSection.ok.uppercased(), + action: { [weak self] in self?.route = nil }) ) - } - self?.isAPICallInFlight = false - }, - receiveValue: { [unowned self] in onSuccess($0, .init(rawValue: email)) } - ) + ) + } + isAPICallInFlight = false + } +// loginCancellable = environment.apiClient.authenticate( +// Username(rawValue: email.trimmingCharacters(in: .whitespacesAndNewlines)), +// Password(rawValue: password.trimmingCharacters(in: .whitespacesAndNewlines)) +// ) +// .receive(on: environment.mainQueue, options: nil) +// .sink( +// receiveCompletion: { [weak self, environment] in +// if case .failure(let error) = $0 { +// self?.route = .alert( +// .withTitleAndMessage( +// title: environment.localizations.error.errorTitle, +// message: error.errorCode == "401" +// ? environment.localizations.login.errorInvalidCredentials +// : environment.localizations.error.serverError, +// action1: .primary( +// title: environment.localizations.defaultSection.ok.uppercased(), +// action: { self?.route = nil }) +// ) +// ) +// } +// self?.isAPICallInFlight = false +// }, +// receiveValue: { [unowned self] in onSuccess($0, .init(rawValue: email)) } +// ) } } diff --git a/Modules/Sources/MainFeature/MainView.swift b/Modules/Sources/MainFeature/MainView.swift index 0204e08..b776978 100644 --- a/Modules/Sources/MainFeature/MainView.swift +++ b/Modules/Sources/MainFeature/MainView.swift @@ -16,8 +16,7 @@ public struct MainView: View { struct MainView_Previews: PreviewProvider { static var previews: some View { MainView( - viewModel: .init( - environment: .init(mainQueue: .immediate)) + viewModel: .init() ) } } diff --git a/Modules/Sources/MainFeature/MainViewModel.swift b/Modules/Sources/MainFeature/MainViewModel.swift index 3870271..8640d40 100644 --- a/Modules/Sources/MainFeature/MainViewModel.swift +++ b/Modules/Sources/MainFeature/MainViewModel.swift @@ -1,17 +1,7 @@ import CombineSchedulers +import SwiftUI public class MainViewModel: ObservableObject { - public struct Environment { - var mainQueue: AnySchedulerOf - public init(mainQueue: AnySchedulerOf) { - self.mainQueue = mainQueue - } - } - - let environment: Environment - - public init(environment: Environment) { - self.environment = environment - } + public init() {} } diff --git a/Modules/Sources/Model/APITokensEnvelope.swift b/Modules/Sources/Model/APITokensEnvelope.swift index 78b8ff8..224f82e 100644 --- a/Modules/Sources/Model/APITokensEnvelope.swift +++ b/Modules/Sources/Model/APITokensEnvelope.swift @@ -42,15 +42,3 @@ extension APITokensEnvelope { token: "MockToken", refreshToken: .init(token: "MockRefreshToken", expiresAt: .distantFuture)) } - -extension AccessToken { - - var expiry: Date { - guard let jwt = JWT(accessToken: self) else { return Date.distantPast } - return Date(timeIntervalSince1970: jwt.exp) - } - - public func isValid(now: Date) -> Bool { - expiry > now - } -} diff --git a/Modules/Sources/NetworkClient/Client.swift b/Modules/Sources/NetworkClient/Client.swift index bfa5581..636ff0f 100644 --- a/Modules/Sources/NetworkClient/Client.swift +++ b/Modules/Sources/NetworkClient/Client.swift @@ -31,10 +31,10 @@ extension NetworkClient { pathUpdateStream: XCTUnimplemented("\(Self.self).pathUpdateStream method not implemented.") ) - public static let noop = Self.init( + public static let noop = Self( pathUpdateStream: { .init(unfolding: { .none }) } ) - public static let happy = Self.init( + public static let happy = Self( pathUpdateStream: { .init { continuation in continuation.yield(.init(status: .satisfied)) @@ -42,7 +42,7 @@ extension NetworkClient { } } ) - public static let unhappy = Self.init( + public static let unhappy = Self( pathUpdateStream: { .init { continuation in continuation.yield(.init(status: .unsatisfied)) diff --git a/Modules/Sources/NetworkClient/DependencyKey.swift b/Modules/Sources/NetworkClient/DependencyKey.swift new file mode 100644 index 0000000..d1d12df --- /dev/null +++ b/Modules/Sources/NetworkClient/DependencyKey.swift @@ -0,0 +1,16 @@ +import Dependencies +import Foundation + +extension NetworkClient: TestDependencyKey { + + public static var testValue: NetworkClient { + .failing + } +} + +public extension DependencyValues { + var networkClient: NetworkClient { + get { self[NetworkClient.self] } + set { self[NetworkClient.self] = newValue } + } +} diff --git a/Modules/Sources/NetworkClient/Live.swift b/Modules/Sources/NetworkClient/Live.swift index 61c8669..d3ec352 100644 --- a/Modules/Sources/NetworkClient/Live.swift +++ b/Modules/Sources/NetworkClient/Live.swift @@ -14,7 +14,7 @@ extension NetworkClient { let monitor = NWPathMonitor() - return Self.init( + return Self( pathUpdateStream: { AsyncStream { continuation in monitor.start(queue: queue) diff --git a/Modules/Sources/PersistenceClient/Client.swift b/Modules/Sources/PersistenceClient/Client.swift index 89d73a4..49f858f 100644 --- a/Modules/Sources/PersistenceClient/Client.swift +++ b/Modules/Sources/PersistenceClient/Client.swift @@ -5,6 +5,7 @@ // Created by Jakob Mygind on 14/01/2022. // +import Dependencies import Foundation import Model @@ -13,3 +14,16 @@ public struct PersistenceClient { public var tokens: FileClient public var email: FileClient } + +extension PersistenceClient: TestDependencyKey { + public static var testValue: Self { + .failing + } +} + +public extension DependencyValues { + var persistenceClient: PersistenceClient { + get { self[PersistenceClient.self] } + set { self[PersistenceClient.self] = newValue } + } +} diff --git a/Modules/Sources/TokenHandler/APITokensEnvelopeProtocol.swift b/Modules/Sources/TokenHandler/APITokensEnvelopeProtocol.swift new file mode 100644 index 0000000..f2995c8 --- /dev/null +++ b/Modules/Sources/TokenHandler/APITokensEnvelopeProtocol.swift @@ -0,0 +1,25 @@ +// +// File.swift +// +// +// Created by Jakob Mygind on 27/01/2023. +// + +import Foundation + + +public protocol APITokensEnvelopeProtocol: Equatable, Decodable { + var getAccessToken: String { get } + var getRefreshToken: String { get } +} + +extension APITokensEnvelopeProtocol { + var accessTokenExpiry: Date { + guard let jwt = JWT(accessToken: getAccessToken) else { return Date.distantPast } + return Date(timeIntervalSince1970: jwt.exp) + } + + func isAccessTokenValid(now: Date) -> Bool { + accessTokenExpiry > now + } +} diff --git a/Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift b/Modules/Sources/TokenHandler/AuthenticationhandlerAsync.swift similarity index 82% rename from Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift rename to Modules/Sources/TokenHandler/AuthenticationhandlerAsync.swift index 0c18b1d..12fab44 100644 --- a/Modules/Sources/APIClientLive/AuthenticationhandlerAsync.swift +++ b/Modules/Sources/TokenHandler/AuthenticationhandlerAsync.swift @@ -6,11 +6,14 @@ // import Foundation -import Model + +public struct RefreshBody: Encodable { + let token: String +} /// This class is used to authenticate all requests, and if needed refresh the tokens /// The state of tokens can be monitored by subscribing to `tokenUpdatePublisher`, if this outouts nil, it means the user should log in again -public actor AuthenticationHandlerAsync { +public actor AuthenticationHandlerAsync { var apiTokens: APITokensEnvelope? { get { getTokens() } @@ -26,19 +29,22 @@ public actor AuthenticationHandlerAsync { let getTokens: () -> APITokensEnvelope? let saveTokens: (APITokensEnvelope?) -> Void + let refreshBodyTransform: (_ refreshToken: String) -> any Encodable public init( refreshURL: URL, getTokens: @escaping () -> APITokensEnvelope?, saveTokens: @escaping (APITokensEnvelope?) -> Void, now: @escaping () -> Date = Date.init, - networkRequest: @escaping (URLRequest) async throws -> (Data, URLResponse) = URLSession.shared.data(for: ) + networkRequest: @escaping (URLRequest) async throws -> (Data, URLResponse) = URLSession.shared.data(for: ), + refreshBodyTransform: @escaping (_ refreshToken: String) -> some Encodable = RefreshBody.init(token: ) ) { self.refreshURL = refreshURL self.getTokens = getTokens self.saveTokens = saveTokens self.now = now self.networkRequest = networkRequest + self.refreshBodyTransform = refreshBodyTransform } func validTokens() async throws -> APITokensEnvelope { @@ -50,7 +56,7 @@ public actor AuthenticationHandlerAsync { throw URLError(.userAuthenticationRequired) } - if apiTokens.token.isValid(now: now()) { + if apiTokens.isAccessTokenValid(now: now()) { return apiTokens } @@ -65,10 +71,10 @@ public actor AuthenticationHandlerAsync { let task = Task { () throws -> APITokensEnvelope in defer { self.refreshTask = nil } - guard let refreshToken = apiTokens?.refreshToken else { + guard let refreshToken = apiTokens?.getRefreshToken else { throw URLError(.userAuthenticationRequired) } - let newTokens = try await AuthenticationHandlerAsync.refreshTokens(using: refreshToken.token, refreshURL: refreshURL, networkRequest: networkRequest) + let newTokens = try await AuthenticationHandlerAsync.refreshTokens(using: refreshToken, refreshURL: refreshURL, networkRequest: networkRequest, refreshBodyTransform: refreshBodyTransform) apiTokens = newTokens return newTokens @@ -78,18 +84,16 @@ public actor AuthenticationHandlerAsync { return try await task.value } - + /// Make call to refresh access token /// - Parameter refreshToken: refreshtoken to be used /// - Returns: A fresh set of tokens private static func refreshTokens( - using refreshToken: RefreshToken, + using refreshToken: String, refreshURL: URL, - networkRequest: (URLRequest) async throws -> (Data, URLResponse) + networkRequest: (URLRequest) async throws -> (Data, URLResponse), + refreshBodyTransform: (_ refreshToken: String) -> any Encodable ) async throws -> APITokensEnvelope { - struct Body: Encodable { - let token: String - } let decoder = JSONDecoder() @@ -100,7 +104,7 @@ public actor AuthenticationHandlerAsync { var request = URLRequest(url: refreshURL) request.httpMethod = "POST" - request.httpBody = try JSONEncoder().encode(Body(token: refreshToken.rawValue)) + request.httpBody = try JSONEncoder().encode(refreshBodyTransform(refreshToken)) request.setValue("application/json", forHTTPHeaderField: "Content-Type") let response = try await networkRequest(request) @@ -122,7 +126,7 @@ public actor AuthenticationHandlerAsync { let tokens = try await validTokens() do { - let response = try await performAuthenticatedRequest(request, accessToken: tokens.token) + let response = try await performAuthenticatedRequest(request, accessToken: tokens.getAccessToken) if let code = (response.1 as? HTTPURLResponse)?.statusCode, code == 401 { @@ -131,7 +135,7 @@ public actor AuthenticationHandlerAsync { return response } catch let error as URLError where error.code == .userAuthenticationRequired { let freshTokens = try await refreshedTokens() - let response = try await performAuthenticatedRequest(request, accessToken: freshTokens.token) + let response = try await performAuthenticatedRequest(request, accessToken: freshTokens.getAccessToken) return response } } catch { @@ -144,7 +148,7 @@ public actor AuthenticationHandlerAsync { /// throws auth error if provided token should be invalid private func performAuthenticatedRequest( _ request: URLRequest, - accessToken: AccessToken + accessToken: String ) async throws -> (Data, URLResponse) { var request = request request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization") diff --git a/Modules/Sources/Model/JWT.swift b/Modules/Sources/TokenHandler/JWT.swift similarity index 76% rename from Modules/Sources/Model/JWT.swift rename to Modules/Sources/TokenHandler/JWT.swift index 1b3117a..e5d1404 100644 --- a/Modules/Sources/Model/JWT.swift +++ b/Modules/Sources/TokenHandler/JWT.swift @@ -1,18 +1,11 @@ -// -// File.swift -// -// -// Created by Jakob Mygind on 16/12/2021. -// - import Foundation struct JWT: Decodable { let exp: Double - init?(accessToken: AccessToken) { - let jwtStrings = accessToken.rawValue.split(separator: ".") + init?(accessToken: String) { + let jwtStrings = accessToken.split(separator: ".") guard jwtStrings.count == 3 else { return nil } diff --git a/Modules/Tests/TokenHandlerTests/Models.swift b/Modules/Tests/TokenHandlerTests/Models.swift new file mode 100644 index 0000000..7c43cfe --- /dev/null +++ b/Modules/Tests/TokenHandlerTests/Models.swift @@ -0,0 +1,48 @@ +// +// File.swift +// +// +// Created by Jakob Mygind on 27/01/2023. +// + +import Foundation +import TokenHandler + +public struct RefreshTokenEnvelope: Codable, Equatable { + init(token: String, expiresAt: Date) { + self.token = token + self.expiresAt = expiresAt + } + + public var token: String + public var expiresAt: Date +} + +public struct APITokensEnvelope: Codable, Equatable { + init( + token: String, + refreshToken: RefreshTokenEnvelope + ) { + self.token = token + self.refreshToken = refreshToken + } + + public var token: String + public var refreshToken: RefreshTokenEnvelope +} + +extension APITokensEnvelope { + public static let mock = Self( + token: "MockToken", + refreshToken: .init(token: "MockRefreshToken", expiresAt: .distantFuture)) +} + +extension APITokensEnvelope: APITokensEnvelopeProtocol { + public var getAccessToken: String { + token + } + + public var getRefreshToken: String { + refreshToken.token + } +} diff --git a/Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift b/Modules/Tests/TokenHandlerTests/TokenHandlerTests.swift similarity index 92% rename from Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift rename to Modules/Tests/TokenHandlerTests/TokenHandlerTests.swift index 7d7e5e3..53a9b67 100644 --- a/Modules/Tests/APIClientLiveTests/APIClientAsyncLiveTests.swift +++ b/Modules/Tests/TokenHandlerTests/TokenHandlerTests.swift @@ -8,10 +8,10 @@ import XCTest // // Created by Jakob Mygind on 20/01/2022. // -@testable import APIClientLive -@testable import Model +@testable import TokenHandler +//@testable import Model -final class APIClientAsyncLiveTests: XCTestCase { +final class TokenHandlerTests: XCTestCase { var formatter: DateFormatter = { let formatter = DateFormatter() @@ -27,15 +27,9 @@ final class APIClientAsyncLiveTests: XCTestCase { } lazy var newTokens = APITokensEnvelope( - token: .init( - rawValue: - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiOSIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjQyNjgxMzU1LCJleHAiOjE2NDI2ODI1NTUsImlhdCI6MTY0MjY4MTM1NX0.TUt15w5BOJfeekhM4TY0qdCHNlr4qtDIVdh_S6MzwTI" - ), + token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiOSIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjQyNjgxMzU1LCJleHAiOjE2NDI2ODI1NTUsImlhdCI6MTY0MjY4MTM1NX0.TUt15w5BOJfeekhM4TY0qdCHNlr4qtDIVdh_S6MzwTI", refreshToken: .init( - token: .init( - rawValue: - "6/IOyrlaxkYSI/hqVrDFgzn2tefXfKrVNQJvEIJ32gMhDDNAkmDMYiNogS4LvdS3r3CLuRqbiWWNLcTby3i9xg==" - ), + token: "6/IOyrlaxkYSI/hqVrDFgzn2tefXfKrVNQJvEIJ32gMhDDNAkmDMYiNogS4LvdS3r3CLuRqbiWWNLcTby3i9xg==", expiresAt: formatter.date(from: "2022-04-20T12:22:35.3876411Z")! ) ) @@ -68,7 +62,8 @@ final class APIClientAsyncLiveTests: XCTestCase { return try await withCheckedThrowingContinuation({ cont in continuation = cont }) - }) + } + ) var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] @@ -327,3 +322,9 @@ extension URLResponse { url: URL(string: "refresh://")!, statusCode: 401, httpVersion: nil, headerFields: nil)! } +extension String { + /// A token with expiry some time in December afair + public static let expired = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMyIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjM5NTg0OTUyLCJleHAiOjE2Mzk1ODYxNTIsImlhdCI6MTYzOTU4NDk1Mn0.X2w58Hk8Wtct3-PHYqPLGmCsUgrPuLcp9-hw98E4ZCM" + + public static let expires06142256 = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiMyIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjo5MDM5NTg0OTUyLCJleHAiOjkwMzk1ODQ5NTIsImlhdCI6OTAzOTU4NDk1Mn0.NUkAhQu3Enh-S02ktYWA97OVkp3skSkLcYXFEEpHCfw" +} diff --git a/Modules/build/GeneratedModuleMaps-iphoneos/AppVersion.modulemap b/Modules/build/GeneratedModuleMaps-iphoneos/AppVersion.modulemap deleted file mode 100644 index 51d3f25..0000000 --- a/Modules/build/GeneratedModuleMaps-iphoneos/AppVersion.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module AppVersion { -header "AppVersion-Swift.h" -export * -} \ No newline at end of file diff --git a/Modules/build/GeneratedModuleMaps-iphoneos/Model.modulemap b/Modules/build/GeneratedModuleMaps-iphoneos/Model.modulemap deleted file mode 100644 index 66c39bd..0000000 --- a/Modules/build/GeneratedModuleMaps-iphoneos/Model.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module Model { -header "Model-Swift.h" -export * -} \ No newline at end of file diff --git a/Modules/build/GeneratedModuleMaps-iphoneos/NetworkClient.modulemap b/Modules/build/GeneratedModuleMaps-iphoneos/NetworkClient.modulemap deleted file mode 100644 index 50c2854..0000000 --- a/Modules/build/GeneratedModuleMaps-iphoneos/NetworkClient.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module NetworkClient { -header "NetworkClient-Swift.h" -export * -} \ No newline at end of file diff --git a/Modules/build/GeneratedModuleMaps-iphoneos/PrinterClient-Swift.h b/Modules/build/GeneratedModuleMaps-iphoneos/PrinterClient-Swift.h deleted file mode 100644 index 482aa27..0000000 --- a/Modules/build/GeneratedModuleMaps-iphoneos/PrinterClient-Swift.h +++ /dev/null @@ -1,212 +0,0 @@ -// Generated by Apple Swift version 5.5.2 (swiftlang-1300.0.47.5 clang-1300.0.29.30) -#ifndef PRINTERCLIENT_SWIFT_H -#define PRINTERCLIENT_SWIFT_H -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgcc-compat" - -#if !defined(__has_include) -# define __has_include(x) 0 -#endif -#if !defined(__has_attribute) -# define __has_attribute(x) 0 -#endif -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif -#if !defined(__has_warning) -# define __has_warning(x) 0 -#endif - -#if __has_include() -# include -#endif - -#pragma clang diagnostic ignored "-Wauto-import" -#include -#include -#include -#include - -#if !defined(SWIFT_TYPEDEFS) -# define SWIFT_TYPEDEFS 1 -# if __has_include() -# include -# elif !defined(__cplusplus) -typedef uint_least16_t char16_t; -typedef uint_least32_t char32_t; -# endif -typedef float swift_float2 __attribute__((__ext_vector_type__(2))); -typedef float swift_float3 __attribute__((__ext_vector_type__(3))); -typedef float swift_float4 __attribute__((__ext_vector_type__(4))); -typedef double swift_double2 __attribute__((__ext_vector_type__(2))); -typedef double swift_double3 __attribute__((__ext_vector_type__(3))); -typedef double swift_double4 __attribute__((__ext_vector_type__(4))); -typedef int swift_int2 __attribute__((__ext_vector_type__(2))); -typedef int swift_int3 __attribute__((__ext_vector_type__(3))); -typedef int swift_int4 __attribute__((__ext_vector_type__(4))); -typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); -typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); -typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); -#endif - -#if !defined(SWIFT_PASTE) -# define SWIFT_PASTE_HELPER(x, y) x##y -# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) -#endif -#if !defined(SWIFT_METATYPE) -# define SWIFT_METATYPE(X) Class -#endif -#if !defined(SWIFT_CLASS_PROPERTY) -# if __has_feature(objc_class_property) -# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ -# else -# define SWIFT_CLASS_PROPERTY(...) -# endif -#endif - -#if __has_attribute(objc_runtime_name) -# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) -#else -# define SWIFT_RUNTIME_NAME(X) -#endif -#if __has_attribute(swift_name) -# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) -#else -# define SWIFT_COMPILE_NAME(X) -#endif -#if __has_attribute(objc_method_family) -# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) -#else -# define SWIFT_METHOD_FAMILY(X) -#endif -#if __has_attribute(noescape) -# define SWIFT_NOESCAPE __attribute__((noescape)) -#else -# define SWIFT_NOESCAPE -#endif -#if __has_attribute(ns_consumed) -# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed)) -#else -# define SWIFT_RELEASES_ARGUMENT -#endif -#if __has_attribute(warn_unused_result) -# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#else -# define SWIFT_WARN_UNUSED_RESULT -#endif -#if __has_attribute(noreturn) -# define SWIFT_NORETURN __attribute__((noreturn)) -#else -# define SWIFT_NORETURN -#endif -#if !defined(SWIFT_CLASS_EXTRA) -# define SWIFT_CLASS_EXTRA -#endif -#if !defined(SWIFT_PROTOCOL_EXTRA) -# define SWIFT_PROTOCOL_EXTRA -#endif -#if !defined(SWIFT_ENUM_EXTRA) -# define SWIFT_ENUM_EXTRA -#endif -#if !defined(SWIFT_CLASS) -# if __has_attribute(objc_subclassing_restricted) -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# else -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# endif -#endif -#if !defined(SWIFT_RESILIENT_CLASS) -# if __has_attribute(objc_class_stub) -# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub)) -# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME) -# else -# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) -# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME) -# endif -#endif - -#if !defined(SWIFT_PROTOCOL) -# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -#endif - -#if !defined(SWIFT_EXTENSION) -# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) -#endif - -#if !defined(OBJC_DESIGNATED_INITIALIZER) -# if __has_attribute(objc_designated_initializer) -# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -# else -# define OBJC_DESIGNATED_INITIALIZER -# endif -#endif -#if !defined(SWIFT_ENUM_ATTR) -# if defined(__has_attribute) && __has_attribute(enum_extensibility) -# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) -# else -# define SWIFT_ENUM_ATTR(_extensibility) -# endif -#endif -#if !defined(SWIFT_ENUM) -# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# if __has_feature(generalized_swift_name) -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# else -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) -# endif -#endif -#if !defined(SWIFT_UNAVAILABLE) -# define SWIFT_UNAVAILABLE __attribute__((unavailable)) -#endif -#if !defined(SWIFT_UNAVAILABLE_MSG) -# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) -#endif -#if !defined(SWIFT_AVAILABILITY) -# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) -#endif -#if !defined(SWIFT_WEAK_IMPORT) -# define SWIFT_WEAK_IMPORT __attribute__((weak_import)) -#endif -#if !defined(SWIFT_DEPRECATED) -# define SWIFT_DEPRECATED __attribute__((deprecated)) -#endif -#if !defined(SWIFT_DEPRECATED_MSG) -# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) -#endif -#if __has_feature(attribute_diagnose_if_objc) -# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) -#else -# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) -#endif -#if !defined(IBSegueAction) -# define IBSegueAction -#endif -#if __has_feature(modules) -#if __has_warning("-Watimport-in-framework-header") -#pragma clang diagnostic ignored "-Watimport-in-framework-header" -#endif -#endif - -#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" -#pragma clang diagnostic ignored "-Wduplicate-method-arg" -#if __has_warning("-Wpragma-clang-attribute") -# pragma clang diagnostic ignored "-Wpragma-clang-attribute" -#endif -#pragma clang diagnostic ignored "-Wunknown-pragmas" -#pragma clang diagnostic ignored "-Wnullability" - -#if __has_attribute(external_source_symbol) -# pragma push_macro("any") -# undef any -# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="PrinterClient",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) -# pragma pop_macro("any") -#endif - -#if __has_attribute(external_source_symbol) -# pragma clang attribute pop -#endif -#pragma clang diagnostic pop -#endif diff --git a/Modules/build/GeneratedModuleMaps-iphoneos/PrinterClient.modulemap b/Modules/build/GeneratedModuleMaps-iphoneos/PrinterClient.modulemap deleted file mode 100644 index 114b024..0000000 --- a/Modules/build/GeneratedModuleMaps-iphoneos/PrinterClient.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module PrinterClient { -header "PrinterClient-Swift.h" -export * -} \ No newline at end of file diff --git a/Modules/build/GeneratedModuleMaps-iphoneos/SoundClient.modulemap b/Modules/build/GeneratedModuleMaps-iphoneos/SoundClient.modulemap deleted file mode 100644 index d32a212..0000000 --- a/Modules/build/GeneratedModuleMaps-iphoneos/SoundClient.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module SoundClient { -header "SoundClient-Swift.h" -export * -} \ No newline at end of file diff --git a/Modules/build/GeneratedModuleMaps-iphoneos/TouchInterceptorClient.modulemap b/Modules/build/GeneratedModuleMaps-iphoneos/TouchInterceptorClient.modulemap deleted file mode 100644 index b9c4aef..0000000 --- a/Modules/build/GeneratedModuleMaps-iphoneos/TouchInterceptorClient.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module TouchInterceptorClient { -header "TouchInterceptorClient-Swift.h" -export * -} \ No newline at end of file diff --git a/Modules/build/Modules.build/Release-iphoneos/AppVersion.build/AppVersion.modulemap b/Modules/build/Modules.build/Release-iphoneos/AppVersion.build/AppVersion.modulemap deleted file mode 100644 index 51d3f25..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/AppVersion.build/AppVersion.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module AppVersion { -header "AppVersion-Swift.h" -export * -} \ No newline at end of file diff --git a/Modules/build/Modules.build/Release-iphoneos/Model.build/Model.modulemap b/Modules/build/Modules.build/Release-iphoneos/Model.build/Model.modulemap deleted file mode 100644 index 66c39bd..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/Model.build/Model.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module Model { -header "Model-Swift.h" -export * -} \ No newline at end of file diff --git a/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-OutputFileMap.json b/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-OutputFileMap.json deleted file mode 100644 index 1c4a59f..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-OutputFileMap.json +++ /dev/null @@ -1 +0,0 @@ -{"":{"dependencies":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-master.d","diagnostics":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-master.dia","swift-dependencies":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-master.swiftdeps"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/APIError.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/APIError.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/APIError.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/APITokens.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/APITokens.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/APITokens.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Address.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Address.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Address.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/FileClient.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/FileClient.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/FileClient.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/JWT.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/JWT.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/JWT.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Mocks.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Mocks.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Mocks.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Notifications.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Notifications.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Notifications.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Order.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Order.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Order.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/PaginatedResponse.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/PaginatedResponse.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/PaginatedResponse.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Product.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Product.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Product.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Store.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Store.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Store.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/TaggedTypes.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/TaggedTypes.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/TaggedTypes.o"}} \ No newline at end of file diff --git a/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-master.swiftdeps b/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-master.swiftdeps deleted file mode 100644 index ebc30c4..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model-master.swiftdeps +++ /dev/null @@ -1,17 +0,0 @@ -version: "Apple Swift version 5.5.2 (swiftlang-1300.0.47.5 clang-1300.0.29.30)" -options: "07ba6153f890b8d3f8d72548797ed5fb1cc6cfa1163c5810eacb3599dfdc3d9e" -build_start_time: [1646739673, 662739038] -build_end_time: [1646739674, 276296138] -inputs: - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/APIError.swift": !dirty [1646238462, 276232719] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/APITokens.swift": !dirty [1646303656, 496250629] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Address.swift": !dirty [1646238462, 283956527] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/FileClient.swift": !dirty [1646238462, 329151630] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/JWT.swift": !dirty [1646238462, 310457944] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Mocks.swift": !dirty [1646238462, 353058815] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Notifications.swift": !dirty [1646238462, 334352493] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Order.swift": !dirty [1646238462, 305630207] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/PaginatedResponse.swift": !dirty [1646238462, 374204635] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Product.swift": !dirty [1646238462, 360797882] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Store.swift": !dirty [1646238462, 355364799] - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/TaggedTypes.swift": !dirty [1646238462, 332711696] diff --git a/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model.LinkFileList b/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model.LinkFileList deleted file mode 100644 index 0332429..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model.LinkFileList +++ /dev/null @@ -1,12 +0,0 @@ -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/APIError.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/APITokens.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Address.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/FileClient.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/JWT.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Mocks.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Notifications.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Order.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/PaginatedResponse.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Product.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Store.o -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/TaggedTypes.o diff --git a/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model.SwiftFileList b/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model.SwiftFileList deleted file mode 100644 index eabe145..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/Model.build/Objects-normal/arm64/Model.SwiftFileList +++ /dev/null @@ -1,12 +0,0 @@ -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/APIError.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/APITokens.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Address.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/FileClient.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/JWT.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Mocks.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Notifications.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Order.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/PaginatedResponse.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Product.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/Store.swift -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/Model/TaggedTypes.swift diff --git a/Modules/build/Modules.build/Release-iphoneos/Modules_Localizations.build/empty-Modules_Localizations.plist b/Modules/build/Modules.build/Release-iphoneos/Modules_Localizations.build/empty-Modules_Localizations.plist deleted file mode 100644 index 0c67376..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/Modules_Localizations.build/empty-Modules_Localizations.plist +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/Modules/build/Modules.build/Release-iphoneos/Modules_SoundClient.build/empty-Modules_SoundClient.plist b/Modules/build/Modules.build/Release-iphoneos/Modules_SoundClient.build/empty-Modules_SoundClient.plist deleted file mode 100644 index 0c67376..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/Modules_SoundClient.build/empty-Modules_SoundClient.plist +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/Modules/build/Modules.build/Release-iphoneos/Modules_Style.build/assetcatalog_dependencies b/Modules/build/Modules.build/Release-iphoneos/Modules_Style.build/assetcatalog_dependencies deleted file mode 100644 index 7d0a90572ba2d98e71312c627c612c52175d7685..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmb`D!3x4a3`F}0{zw}XM0&HR2fkL-};wJrzD=h48ZRZzrr dS))U*0-Dmg11Bw63DMu$eeL7S`} - - - - diff --git a/Modules/build/Modules.build/Release-iphoneos/Modules_Style.build/empty-Modules_Style.plist b/Modules/build/Modules.build/Release-iphoneos/Modules_Style.build/empty-Modules_Style.plist deleted file mode 100644 index 0c67376..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/Modules_Style.build/empty-Modules_Style.plist +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/NetworkClient.modulemap b/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/NetworkClient.modulemap deleted file mode 100644 index 50c2854..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/NetworkClient.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module NetworkClient { -header "NetworkClient-Swift.h" -export * -} \ No newline at end of file diff --git a/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-OutputFileMap.json b/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-OutputFileMap.json deleted file mode 100644 index ea753f3..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-OutputFileMap.json +++ /dev/null @@ -1 +0,0 @@ -{"":{"dependencies":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.d","diagnostics":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.dia","swift-dependencies":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.swiftdeps"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Client.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/Client.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/Client.o"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Live.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/Live.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/Live.o"}} \ No newline at end of file diff --git a/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.d b/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.d deleted file mode 100644 index f500a4d..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.d +++ /dev/null @@ -1,6 +0,0 @@ -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/Client.o : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Live.swift /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Network.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Network.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Network.framework/Headers/Network.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/Live.o : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Live.swift /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Network.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Network.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Network.framework/Headers/Network.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient.swiftmodule : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Live.swift /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Network.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Network.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Network.framework/Headers/Network.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient.swiftdoc : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Live.swift /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Network.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Network.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Network.framework/Headers/Network.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-Swift.h : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Live.swift /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Network.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Network.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Network.framework/Headers/Network.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient.swiftsourceinfo : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Live.swift /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/NetworkClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Network.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Network.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Network.framework/Headers/Network.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes diff --git a/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.dia b/Modules/build/Modules.build/Release-iphoneos/NetworkClient.build/Objects-normal/arm64/NetworkClient-master.dia deleted file mode 100644 index 1956f7ae52445672cfbdfacc84ea66c6106df611..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 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%0AKz<`IEcCQ|6RvYdkfOv{5JG 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 Q(@2!#2$vrje!Ker0ZJv^_5c6? diff --git a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-OutputFileMap.json b/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-OutputFileMap.json deleted file mode 100644 index 307fcd9..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-OutputFileMap.json +++ /dev/null @@ -1 +0,0 @@ -{"":{"dependencies":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.d","diagnostics":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.dia","swift-dependencies":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.swiftdeps"},"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/PrinterClient/Client.swift":{"llvm-bc":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/Client.bc","object":"/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/Client.o"}} \ No newline at end of file diff --git a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-Swift.h b/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-Swift.h deleted file mode 100644 index 482aa27..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-Swift.h +++ /dev/null @@ -1,212 +0,0 @@ -// Generated by Apple Swift version 5.5.2 (swiftlang-1300.0.47.5 clang-1300.0.29.30) -#ifndef PRINTERCLIENT_SWIFT_H -#define PRINTERCLIENT_SWIFT_H -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wgcc-compat" - -#if !defined(__has_include) -# define __has_include(x) 0 -#endif -#if !defined(__has_attribute) -# define __has_attribute(x) 0 -#endif -#if !defined(__has_feature) -# define __has_feature(x) 0 -#endif -#if !defined(__has_warning) -# define __has_warning(x) 0 -#endif - -#if __has_include() -# include -#endif - -#pragma clang diagnostic ignored "-Wauto-import" -#include -#include -#include -#include - -#if !defined(SWIFT_TYPEDEFS) -# define SWIFT_TYPEDEFS 1 -# if __has_include() -# include -# elif !defined(__cplusplus) -typedef uint_least16_t char16_t; -typedef uint_least32_t char32_t; -# endif -typedef float swift_float2 __attribute__((__ext_vector_type__(2))); -typedef float swift_float3 __attribute__((__ext_vector_type__(3))); -typedef float swift_float4 __attribute__((__ext_vector_type__(4))); -typedef double swift_double2 __attribute__((__ext_vector_type__(2))); -typedef double swift_double3 __attribute__((__ext_vector_type__(3))); -typedef double swift_double4 __attribute__((__ext_vector_type__(4))); -typedef int swift_int2 __attribute__((__ext_vector_type__(2))); -typedef int swift_int3 __attribute__((__ext_vector_type__(3))); -typedef int swift_int4 __attribute__((__ext_vector_type__(4))); -typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2))); -typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3))); -typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4))); -#endif - -#if !defined(SWIFT_PASTE) -# define SWIFT_PASTE_HELPER(x, y) x##y -# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y) -#endif -#if !defined(SWIFT_METATYPE) -# define SWIFT_METATYPE(X) Class -#endif -#if !defined(SWIFT_CLASS_PROPERTY) -# if __has_feature(objc_class_property) -# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__ -# else -# define SWIFT_CLASS_PROPERTY(...) -# endif -#endif - -#if __has_attribute(objc_runtime_name) -# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X))) -#else -# define SWIFT_RUNTIME_NAME(X) -#endif -#if __has_attribute(swift_name) -# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X))) -#else -# define SWIFT_COMPILE_NAME(X) -#endif -#if __has_attribute(objc_method_family) -# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X))) -#else -# define SWIFT_METHOD_FAMILY(X) -#endif -#if __has_attribute(noescape) -# define SWIFT_NOESCAPE __attribute__((noescape)) -#else -# define SWIFT_NOESCAPE -#endif -#if __has_attribute(ns_consumed) -# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed)) -#else -# define SWIFT_RELEASES_ARGUMENT -#endif -#if __has_attribute(warn_unused_result) -# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#else -# define SWIFT_WARN_UNUSED_RESULT -#endif -#if __has_attribute(noreturn) -# define SWIFT_NORETURN __attribute__((noreturn)) -#else -# define SWIFT_NORETURN -#endif -#if !defined(SWIFT_CLASS_EXTRA) -# define SWIFT_CLASS_EXTRA -#endif -#if !defined(SWIFT_PROTOCOL_EXTRA) -# define SWIFT_PROTOCOL_EXTRA -#endif -#if !defined(SWIFT_ENUM_EXTRA) -# define SWIFT_ENUM_EXTRA -#endif -#if !defined(SWIFT_CLASS) -# if __has_attribute(objc_subclassing_restricted) -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# else -# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA -# endif -#endif -#if !defined(SWIFT_RESILIENT_CLASS) -# if __has_attribute(objc_class_stub) -# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub)) -# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME) -# else -# define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) -# define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME) -# endif -#endif - -#if !defined(SWIFT_PROTOCOL) -# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA -#endif - -#if !defined(SWIFT_EXTENSION) -# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__) -#endif - -#if !defined(OBJC_DESIGNATED_INITIALIZER) -# if __has_attribute(objc_designated_initializer) -# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) -# else -# define OBJC_DESIGNATED_INITIALIZER -# endif -#endif -#if !defined(SWIFT_ENUM_ATTR) -# if defined(__has_attribute) && __has_attribute(enum_extensibility) -# define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility))) -# else -# define SWIFT_ENUM_ATTR(_extensibility) -# endif -#endif -#if !defined(SWIFT_ENUM) -# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# if __has_feature(generalized_swift_name) -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type -# else -# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility) -# endif -#endif -#if !defined(SWIFT_UNAVAILABLE) -# define SWIFT_UNAVAILABLE __attribute__((unavailable)) -#endif -#if !defined(SWIFT_UNAVAILABLE_MSG) -# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg))) -#endif -#if !defined(SWIFT_AVAILABILITY) -# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__))) -#endif -#if !defined(SWIFT_WEAK_IMPORT) -# define SWIFT_WEAK_IMPORT __attribute__((weak_import)) -#endif -#if !defined(SWIFT_DEPRECATED) -# define SWIFT_DEPRECATED __attribute__((deprecated)) -#endif -#if !defined(SWIFT_DEPRECATED_MSG) -# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__))) -#endif -#if __has_feature(attribute_diagnose_if_objc) -# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning"))) -#else -# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg) -#endif -#if !defined(IBSegueAction) -# define IBSegueAction -#endif -#if __has_feature(modules) -#if __has_warning("-Watimport-in-framework-header") -#pragma clang diagnostic ignored "-Watimport-in-framework-header" -#endif -#endif - -#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch" -#pragma clang diagnostic ignored "-Wduplicate-method-arg" -#if __has_warning("-Wpragma-clang-attribute") -# pragma clang diagnostic ignored "-Wpragma-clang-attribute" -#endif -#pragma clang diagnostic ignored "-Wunknown-pragmas" -#pragma clang diagnostic ignored "-Wnullability" - -#if __has_attribute(external_source_symbol) -# pragma push_macro("any") -# undef any -# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="PrinterClient",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol)) -# pragma pop_macro("any") -#endif - -#if __has_attribute(external_source_symbol) -# pragma clang attribute pop -#endif -#pragma clang diagnostic pop -#endif diff --git a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.d b/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.d deleted file mode 100644 index f2129b2..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.d +++ /dev/null @@ -1,5 +0,0 @@ -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/Client.o : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/PrinterClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftmodule : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/PrinterClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftdoc : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/PrinterClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-Swift.h : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/PrinterClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftsourceinfo : /Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/PrinterClient/Client.swift /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/ObjectiveC.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Combine.framework/Modules/Combine.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Dispatch.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Darwin.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Foundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreFoundation.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/CoreGraphics.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/lib/swift/_Concurrency.swiftmodule/arm64-apple-ios.swiftinterface /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/ObjectiveC.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Combine.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Dispatch.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Darwin.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Foundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreFoundation.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/CoreGraphics.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/Swift.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/prebuilt-modules/15.2/_Concurrency.swiftmodule/arm64-apple-ios.swiftmodule /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet6.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/kcdata.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/uuid.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/dyld.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/device.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_machine.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach-o/compact_unwind_encoding.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach_debug.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/mach.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/bank.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_posix_sys_types.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/darwin_cdefs.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/net.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/netinet.modulemap /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/objc/ObjectiveC.apinotes /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/apinotes/Dispatch.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/usr/include/Darwin.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/CoreGraphics.framework/Headers/CoreGraphics.apinotes /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS15.2.sdk/System/Library/Frameworks/Security.framework/Headers/Security.apinotes diff --git a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.dia b/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.dia deleted file mode 100644 index a4486890aee19fe3e35fac95f176262dec5ee259..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmZ?qbaZFrU|=v{U|?Wp+~lyu$?}4;g^fa^?v!SmGtO3fnyqD6I+7Y33I$ZSSu~e8 zTg*A^tTe&Ns^zfdk|ygJhplZ?4(psaY;nTLV#i_2DTkSZdYmjSG;6mwTTeOc>;zFc zgUK4G-bSTOa|yHc6sTl#;S49M2hLg-4m(a*!F57FHGo5esZ}G8so6`6gQw|AiNh2J uMWEOs7OqC81rt;RR1H=vYt#U;1thL~MUfPc5COVhk%xhS2}pz3AOHZayhc?3 diff --git a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.swiftdeps b/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.swiftdeps deleted file mode 100644 index 4bb0910..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient-master.swiftdeps +++ /dev/null @@ -1,6 +0,0 @@ -version: "Apple Swift version 5.5.2 (swiftlang-1300.0.47.5 clang-1300.0.29.30)" -options: "b8f5e74fef108489543b05327fb8278e89aadc966d0c62c8be2b0af7cff11f49" -build_start_time: [1646739670, 196513175] -build_end_time: [1646739673, 272656917] -inputs: - "/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/PrinterClient/Client.swift": [1646238461, 358780860] diff --git a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.LinkFileList b/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.LinkFileList deleted file mode 100644 index 1a94b2d..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.LinkFileList +++ /dev/null @@ -1 +0,0 @@ -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/Client.o diff --git a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.SwiftFileList b/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.SwiftFileList deleted file mode 100644 index 3c406f0..0000000 --- a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.SwiftFileList +++ /dev/null @@ -1 +0,0 @@ -/Users/jakobmygind/Documents/Xcode/ML/7-Eleven/InStoreApp/Modules/Sources/PrinterClient/Client.swift diff --git a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftdoc b/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftdoc deleted file mode 100644 index 785ad952f670c42bed103142d5edf5a09103a39c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 576 zcmaDfX9YVW2Lpp90|Ns)qlJ#c+7Dby0=U-%aP4>CT5rI$Ux91Q2d>2%xY!*xUFbQa zy@N^j#3Ahshx9v`wD%m+SaZl(Xp58P1t*OOP8vYc#=uE?50mBX(b9}sYS(^`FRSadZv0t3L3>A!JNdrbX`MZ0|Pw+Jri?1Q-x$? z5hF`IV*||`pg93WnRz9tMb0^ysd*(p{yZQ~EXp-A(M<%|pqrUrY-p-y02F0lXcc5& zumaLXYyv!92N>3X+yVlO3_fht7es)p=|Eg;WoV3Is-t6=El}JOWKUXRa;idFei6_) zAPW^ri&Ik+O7ayPQ&RMUQgidmQWXjyE-F??%u9iAGV{_wR)Me+5bNvfD^O$@7tjzG SfEmmJ6j0*IP=xsjCJz8!b)(h* diff --git a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftmodule b/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftmodule deleted file mode 100644 index 8ac46df725a181329253a52a6fb87bcfbebf03ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41012 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 diff --git a/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftsourceinfo b/Modules/build/Modules.build/Release-iphoneos/PrinterClient.build/Objects-normal/arm64/PrinterClient.swiftsourceinfo deleted file mode 100644 index 038769bca3555424de69ae5e358902abc09efd7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6452 zcmbtYe{3699e;M3rX;0Hv(c@Pl`Kt}9VhnLiEElhTh4KswcFCD*M%t>Gmd>p+}J+P zcTVF;NFxMke{^k-s-i+WU}S7vI~t}*Ico75p^szg7UA%s^ z*m0?ddQInXr}uKvHy?Ik(B6)9ZVa+A+c7umITdyH-3GRCJ!3mIGPWJ{rrLw! zPhD&g8e12d>Rzou3u6mNVm6zSTcpFuajj)q&Z$Wy(-QOsy@3{&N{y*lW}?&IB?w-@ z+a2--TjJ#{fnDA%!JPuma4wnACi%Qc?XuuYgv@YU>)= z^;*VSx45p5u0+EBNoV};%)3s%wdD_Yl<->DPhPoRDl!N1w~#g=-Db4$Oh(}f67gUv z6-2yqb&T~PCya6;9;c5{Xhgc5HyAm|e27FmY(oVRFM(~?fxNbY!x-^6`7v-4D#o;U zvo2$o$3c1x>@V^LBd77J@uKKQ`h3QuA8*ni^Ep(^^tQ|6*r$NK#RA(dk7K_9>^m*6 z?eaMGGO+Kmz_!cd*qd;WK9367S~<~PR^vSm8*GD2wY@wHnR_9#xf~c}!p<2yGyC4Y zjxi5pYEAm_rqk%}LWRy>IT5y99>@8yfld2aPK0fj$8pGolHNObgOL-qT^@(}m4O}N z4Q1GNc^v9Z1ACA+lwsTDaj1U)+l|U+c|#etT^@(J4Yt&7fo+$^v4g%e88f}B@&1U5>YEn*(5zDm*k3`( zY`yLB3}|-P!2S|%FmhUxYP=sbFcyVOwKe%3oa-UTnCWeoXQ;={7}(^)%Zc=^#@mJs zo`Fm?y>~uvRoKbw8hXDAnQuYH%m%CReuKdGyB7Td^^F@3 zy|dv1ij9aI?C1Y-k8DFp?eTY2{7H%8NOwk2vSN68V)PzecJ|u-H>hML8yb%#Q_0MP zE>2;+ll`*h!?spkT<$UJ(w$b~Q;^S&($>svzOas5v)UuYR;v;aM+8wAIiNn78VFJ^ zwIIa`Vq{QC?ir=n)5&VJk8*UX%mxZ(=@+pO>Q~ZZ$&Bm|h?&B0ek_$#C*|BoK@9st z`qU4|YCfe&T1?BU`_?L_kfw9#fmkb1k)N%B zBGa%^DUeKHS2kJ0a>nc`@M#G{M3jy?+sGj07lOZz;eX#J^JGR=3If(HlN`l%Kw ziytotzkTn6$8OEU@|mfOayS!_$78Vf(nRTX!omLZ@jcH{EMhiM(`f{itelH!c)Qty z^Ur5Nzf=zP{*B$yb_+1FSbsp3bIDk0D4!mab9819`Jvy7N^_u3??-lKacWn&h=JgA zER~nV{=&=?(ZQLh79Wq3?{Tm**Btj-p4zThB7v=j3m}DX&gsF!!T$Ww+DGJPKZnnO{uDFuP$Z_o;S)awU3k6LL4&-u5E}9+uuhwLnXRp2P zEBVh=O9Mx)ulBAnERd!s+GIp`G2Btn{o-JMd;97O^jc}And#04N(S7YQdGX}2qJ*A zxaHtUirq|+y2fQKK51Mus?{XPx$8SJcyqD^><(^3_@TcaYkseEub9uYbgx8kuaN(H zLYw(2g%xJ%2s?9fTA7wBOn~0f9ISiyUzbO%y8Vyw`pp(sz*U6{VNl?%S&T?hR0>Ga z7?~$RRE!gnZa@2)#W?=T)e=h9dQ<5Niz!`lV))k9G+GcJic=Ezk!guTWLA1@?OTy1 zL62b$_Olyn-y+#j3e+9!li&S&U+FxWM+Ic7H+S$(z0ZALpF82QS|pRZTMq~O&|y0g z5jhq?FO}llC8Jy|i{pl@fs6Gaokn^WX*IcVS3QVylI|=Jy^#<#(SU1E)R6fO@*7B7 zaS#W}f<1aeCmKQino*{DGu`e6&7r)P3~3eR(RRjYZ{75PuAc7^xLehCC^n^xr3(|u zOu`pY;`uaQ%~ju{ahR&_;fH*o&Vdx-o{VpAM$(j=j8}T!!%8Bbl2xCiVoMC@qz$;Mz71jiz}eNd^DC1?%AC;?V65j^jR9 zFdj|zX|hSfcrN*H*x=o2acr>XI{s|dV|_Ro)CO+Zo$~T|5sJf-in>H)4V(+&2yq0y zvy%8g1zUBnq%o{2h>6z{4dk_u{KKYimZHSWpd+d)DI^1XEtEyQkfJeeMM-|c!Wu`B oE;9+4Ek@Iz|1I0^g0cY^1tUKftXcrt2Q)pH}g?a?V8A73~XviWhpran#6hiRDv zpQ(Ds5;pB-m^~dgnaiBW+1Ik>Bcl;-fmw8iIE;@>TrwJM`Z8iZwZ}%Cc%;WT3mFZJ zvZ7YYZ5l6Xxhd?3(_mv)ScJ1zBw0$Z;nP4wzC{DAD#<3E%~IxnDZRF*?w%}kSnF6M z|HZ_smT)BEd7MgdmF^;tI3GHa#fdwR6jL^ohxKix!@Q(N1iG>W diff --git a/Modules/build/Release-iphoneos/Modules_Localizations.bundle/Localizations_da-DK.json b/Modules/build/Release-iphoneos/Modules_Localizations.bundle/Localizations_da-DK.json deleted file mode 100644 index f8a6c1b..0000000 --- a/Modules/build/Release-iphoneos/Modules_Localizations.bundle/Localizations_da-DK.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "data" : { - "dashboard" : { - "allOrdersButton" : "Se tidligere ordrer", - "columnAccepted" : "Accepterede", - "columnAcceptedEmpty" : "Ingen ordrer tilberedes", - "columnDoneToday" : "Gennemført i dag", - "columnDoneTodayEmpty" : "Ingen ordrer leveret i dag", - "columnIncoming" : "Nye ordrer", - "columnIncomingEmpty" : "Ingen nye ordrer", - "columnOutForDelivery" : "Under levering", - "columnOutForDeliveryEmpty" : "Ingen ordrer leveres", - "columnReady" : "Klar til afhentning", - "columnReadyEmpty" : "Ingen ordrer afventer afhentning", - "itemsPlural" : "varer", - "itemsSingular" : "vare", - "sectionLater" : "Senere", - "sectionToday" : "I dag", - "sectionTomorrow" : "I morgen" - }, - "default" : { - "back" : "Tilbage", - "cancel" : "Annuller", - "edit" : "Rediger", - "later" : "Senere", - "next" : "Næste", - "no" : "Nej", - "ok" : "Ok", - "previous" : "Forrige", - "retry" : "Prøv igen", - "save" : "Gem", - "settings" : "Indstillinger", - "skip" : "Spring over", - "yes" : "Ja" - }, - "deliveryType" : { - "collect" : "Afhentes", - "delivery" : "Leveres" - }, - "error" : { - "authenticationError" : "Login er udløbet, login venligst ind igen.", - "connectionError" : "Ingen eller dårlig forbindelse til internettet", - "errorTitle" : "Fejl", - "serverError" : "Ingen forbindelse til system", - "unknownError" : "Ukendt fejl, prøv igen." - }, - "login" : { - "appName" : "Merchant ", - "appVersionPrefix" : "Version", - "emailHeader" : "Email", - "emailPlaceholder" : "Skriv her", - "errorInvalidCredentials" : "Ugyldige loginoplysninger", - "loginButton" : "Log ind", - "passwordHeader" : "Password", - "passwordPlaceholder" : "Skriv her", - "resetPasswordMessage" : "Kontakt [hovedkontoret] for at nulstille passwordet.", - "title" : "Log ind" - }, - "orderDetailNewOrderSection" : { - "acceptButton" : "Acceptér", - "customerNameHeader" : "Kundens navn", - "deliveryTimeHeader" : "Leveringstid", - "header" : "Ny ordre", - "phoneNumberHeader" : "Telefonnummer", - "pickedUpInStoreAt" : "Afhentes i butik", - "pickupTimeHeader" : "Afhentningstid", - "rejectButton" : "Afvis", - "subheader" : "Gennemgå ordren og se om alt kan leveres før ordren accepteres. Ring til kunden for at aftale evt. ombytning, før ordren afvises." - }, - "orderDetails" : { - "aPiece" : "pr stk", - "completedBanner" : "Denne ordre er afsluttet", - "customerNoteHeader" : "Note fra kunde", - "deliveryTypeHeader" : "Leveringstype", - "errorCouldNotFetchProducts" : "Hentning af produkter mislykkedes🤬", - "errorStatusUpdateFailed" : "Opdatering af status for ordre mislykkedes🥲\nPrøv igen!", - "includeCutlery" : "Inkluder bestik", - "infoAddress" : "LeveringsAdresse", - "infoCustomerName" : "Kundens navn", - "infoDeliveryTime" : "Levering", - "infoEmail" : "Email", - "infoMobilePhone" : "Mobilnummer", - "infoOrderTime" : "Bestilling", - "infoPaymentType" : "Betalingsform", - "infoTakeoutPhone" : "Telefonnummer", - "infoTakeOutShopID" : "Takeout Shop ID", - "outForDeliveryButton" : "Under levering", - "pickedUpButton" : "Afhentet", - "pickupTimeHeader" : "Afhentningstid", - "printButton" : "Print", - "readyButton" : "Klar", - "rejectButton" : "Afvis", - "rejectOrderAlertCancel" : "Afvis ikke", - "rejectOrderAlertConfirm" : "Afvis", - "rejectOrderAlertMessage" : "Er du sikker på at du vil afvise denne ordre?", - "rejectOrderAlertTitle" : "Afvis ordre", - "sectionHeaderColdProducts" : "Kolde", - "sectionHeaderCustomerInfo" : "Kundeinformation", - "sectionHeaderOrderStatus" : "Ordrestatus", - "sectionHeaderOtherProducts" : "Andre", - "sectionHeaderTakeout" : "Takeout", - "sectionHeaderWarmProducts" : "Varme", - "sectionSubheaderColdProducts" : "Pakkes i thermopose", - "today" : "I dag", - "underPreparationButton" : "Forberedes" - }, - "orderStatus" : { - "accepted" : "Accepterede" - }, - "printer" : { - "bluetoothHintFooter" : "Printer skal være tilføjet under Bluetooth i indstillinger for iPad for at dukke op her", - "connectButton" : "Forbind", - "connectedSuccessMessage" : "Printer forbundet!", - "deleteButton" : "Slet", - "errorSomethingHappened" : "Der skete en fejl i forbindelsen til printeren", - "sectionHeaderActivePrinter" : "Aktiv printer", - "sectionHeaderNewPrinters" : "Vælg printer", - "title" : "Printer" - }, - "printerOutput" : { - "coldHeader" : "Kolde", - "errorDeviceConnectionFailed" : "Kunne ikke forbinde til printeren", - "errorNoDeviceFound" : "Ingen printer forbundet til appen", - "includeCutlery" : "Inkludér bestik", - "noteHeader" : "Note", - "orderNumber" : "Ordrenr", - "otherHeader" : "Andre", - "warmHeader" : "Varme" - }, - "searchOrders" : { - "customerNameHeader" : "Kundens navn", - "emptyMessage" : "Ingen ordrer fundet", - "orderDateHeader" : "Ordredato og -tid", - "orderNumberHeader" : "Nr.", - "orderStatusHeader" : "Status", - "searchfieldPlaceholder" : "Søg på ordrenr. og navn", - "statusAccepted" : "Accepteret", - "statusCompleted" : "Leveret", - "statusNew" : "Ny", - "statusReady" : "Klar til afhentning", - "statusRejected" : "Afvist", - "statusShipped" : "Under levering", - "title" : "Alle ordrer" - }, - "settings" : { - "appVersionHeader" : "App-version", - "closeButton" : "Luk indstillinger", - "logOutAlertCancel" : "Forbliv logget ind", - "logOutAlertConfirm" : "Log ud", - "logOutAlertMessage" : "Er du sikker på at du vil logge ud?", - "logoutAlertTitle" : "Log ud", - "logOutButton" : "Log ud", - "printerHeader" : "Printer", - "selectPrinterButton" : "Vælg printer", - "title" : "Indstillinger", - "usernameHeader" : "Bruger" - }, - "units" : { - "clt" : "Cl", - "cmt" : "cm", - "d70" : "Cal", - "dlt" : "Dl", - "e14" : "Kcal", - "grm" : "Gr", - "h87" : "styk", - "kgm" : "Kg", - "ltr" : "Liter", - "mlt" : "Ml" - } - }, - "meta" : { - "language" : { - "direction" : "LRM", - "id" : 6, - "is_best_fit" : false, - "is_default" : true, - "locale" : "da-DK", - "name" : "Danish" - }, - "platform" : { - "id" : 584, - "slug" : "mobile" - } - } -} \ No newline at end of file diff --git a/Modules/build/Release-iphoneos/Modules_SoundClient.bundle/Info.plist b/Modules/build/Release-iphoneos/Modules_SoundClient.bundle/Info.plist deleted file mode 100644 index 17fc8c3f917cec6b3174e40b697f992bfaed924b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 682 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%0AyLqFiM8%^}o)7je=L8bU^X0-$RF)(LepO46Gv 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≫~q_+mMr7%5~2Cdp>5jnZ%yYG-0jW%B;@Z8&ZEX9 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

ygYMY$O92T*MK-9(fInak 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�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 SRG>jLv8oNQcFTm+% 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 V<6*aQb^gEHTL0tS|L4-5{uhiCcCr8f diff --git a/Modules/build/Release-iphoneos/Modules_Style.bundle/Assets.car b/Modules/build/Release-iphoneos/Modules_Style.bundle/Assets.car deleted file mode 100644 index 195b0208e87f6968ac929260cae7a7651f60bf10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56880 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 diff --git a/Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Bold.otf b/Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Bold.otf deleted file mode 100644 index aab73cef3e7fb2f66683b2003a42899d54f70bc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37192 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 diff --git a/Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-ExtraLight.otf b/Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-ExtraLight.otf deleted file mode 100644 index 0092dabf32579ea5b6fc6dde42d835b181b8f51a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35772 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 B9q#}D diff --git a/Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Light.otf b/Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Light.otf deleted file mode 100644 index a6f645536e71db04f32910dad263e1cc96fd44c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35964 zcmbrn2YeGp&^CT2S$Ad+lz<{aELIX=I;KPDq4#3IbO;#RfN=v{=pAgin-V&~gwP>W z8)VT;Zvhe@;6NxTBmq+1K(bQK4*zFQHkg$6`+naa=X7n`?at25JTp7#7ZlV_P=tAc zUTD~vdK@hXVYdaL#?o#B2Xz$Q5y}ceTBINdZ}uD5 zpmC6YbKHw|+>Z%~3ZAs$(fa3tAXgRy{lN)g!J%a%ju`On2#)3x@IW%^gK&*Bg8zi5 zxM}UuhJAqi^8~@LE-HB1Byl{d7sN{Vk)ng6!g^e8{I(#BK7sdaQcP^zi)}(RwC6D1 z+Xay)6@-wnD` z0`w6te!&Z>mE?WrO)y>%0tFGjf{(aXtS1-*U)>R13hq<9XYnhv<1du+GS@so*wbFH z_bhqPH_&buP6&2Yr~CPZB!ucO3g_*Du#CSKf6-0E3Aeg;`91zQaqPx%QRpkS7W(Q| z2z|t_apu<@gueW_z`Tbz2x&rvKEeT^l^BWhew>%!*=^xHakfxT{20epp}BZYXe92$ z`MS_kTrM;d9|-Mn-BS1x<)Cb&?ZfkH=j*5^1kZjHYKRwb&PQ3da9)h}2{fVkcT4>6@S?g=w2UAfN?|GI8O}T%^6SRn7=dFb?$P&J zzw^HT+o8+AGd>o497-L+w?ZczBXHEfQCob3zAhODJ{F~qY?ROM`B;=b_*n2UJB>c# z{r)e9ZY7@cvEbuS>Oh^Z*MAALRx%EJEJ`1|fA~Egi_!-l3qEH2%)gu0|MxThc3%H~ zok63z{`fBb{fBYpeZ<@OUuRCooRw$I<13VRRH%;cG!!4@app%|?cno~(+lQ; zMvr_xaJt|J<^|G>C_eY$XA$EKdao`j#pA^LijUX7o%vYt{whA}776d^KEOR6D^A;g zKl8c9>HWXXd>-<-z|WDzXMWFVfse=k?YU&`^7+H(aOt!4#V;@GFR8By+RBeP#d83( zFBIY)^Nr6VT_d57ZY|~!{%L$@3$DQfN)FBkUmmM4t~mHy(v8Jjd;{`(?!Gcn#U=?i0T}7yhb;KWZRzs*M)Dmh7bwFSBgaDzw&;XRxNN6lH5t<6kgyzD# zLJRQjRzho`jnGzTC%h-L7di+XF%LTnU4*VeH=(=GL+B~=5_+Sb`U?H9g!LB&2m^&6 zVURFb7$OW6h6%&LGe!!dg!hHf!WbbK-;gLI3CTh#R;E?Lhr%Y|BjICVi?CVPDr^^a z3Oj^dSeNz)p9p(}eOPgFgo8q^a9B8mHQgl~6^@BLg(*U)5GI6+y@hGQMq!c=AqEKv z!bEYj;1Je`BZXLTj2JA87p97X#bM%5vAsA-h!kdF9or`43G;;zAzB?a0_p<y zjNc&irvYO%M>L^^MtIv@>?6jCbHt@Oi|(B6EB$u;3AdC?OLfV|50lBQl*A!rHU_Jy!htD$rmRC;RTnjgcpZ!Wb-RQ zC|Xf8?_qQAwIDpK`Ou2rau2pVX#1e?g9i75?)SgnLlEwFxZm!6g(&9>EG42*1xCkqVK66q#v#i)=$(=)=$^Z*Qe>1 z>(_%Y_v#Pn^Yv%-fA}=^Y46j$esp|fWOPh)RPdCD@aXYV!s6nmM8`*mH*DCUq4(6e zLsW3clo&|v+Ns0XDPaj=!P;+!nDH^uVG+UJQ>WmN__(kT?YC1%_>_?NsBw{D(?VWd zb_$J&3l0ehi;fF6&n?YG;@QpUf$;-B8AabxePN%vP7C%n4sJ~nvD1ROo$ z!Xrb&!nNNX-X?~7Pd&WN3HP3Qyez%vt3oEey3{Ib(%gG`Hv(f379ANJ9U30eTkF$E z?brLdqxaOQxAu*Z+HYU&ee|nTO`B<{nl|sNy^q#@yF`xuXxKEH)`QMwe+4kcu!iVH|fxFQuy#80|UFnPl@Rp9~Cww zre9Rp_~1!sc6e}PX!y8sox>vIf+tOh35^eli;a(p3XThpiJlUSfeelej~*8u9UeD5 zJUT9H{FLCx;7Le0Eo^dpFlJ$#c8&~-jnytd0l{%$Q@jsjW?I&~TtKPhZV zY+THgutxP8Hf*RdMtg@Qc8xRI!(;8i_Bd3C2{R?a9y87!G<{N7Y(!XG$b_*mF%k7U z#Y~z$g)>q6$XX#IYug()Z1k>u?DW4Uvv-J$v}@^N?Nh>H!=@yJh1P$)u97?966dT2 z2up83IC>l6kR2Sh4n&^D5LSj@d07g9BVYJNazhM~EkmEk=@S3_^Z0K*W&C_{*0f?>8{ zp&`TYfx%_SH=HqCG+Z?>sf<)ksvuRA{H3~56REk>N$Mu`k_JofOJk*RQiil%+9Yk2 zc1ioCL(&!Lx^!E*Cw(nFmVS{d$Q9+vvR$q&*OME`&E%HydvcIGTplHd$m8S)d5WAM z&yeTH3*}c!grnTR^R=;dA`SePy2rAd)@c8 z?>*mde1GDp8t}h{;6BYD|>G zCPW!W!&SYZ2Hi23Zn|w)Ds5^PNOnjWSs7WjaHj7`6saar%-8lGxN!NvF{;*7$I8qx z!W>NM4C~s+x{o$G+V$z3qdA|gweBObamMP|>(;Gay>8v?)iY+yo;|~=n8T_1^+#k2 zwX(0}=Yt-qigkp~m#)B8wjNaJK}<8-Q`6C*)HFMenr5yf<_t$xqE)R_kN&9kle!EV z(WT9Zvv;jcsQTa&a{lIzR^wgQ*)KnL4)46wT7~|&aPUo4oKF?@NN!9ObDbew8yz5x zj(2_f^!T;!tZa|`-H>Z_P~nAxAzf|i0lDkgkUo9JrqP23E?5=WP7CkIYNq>+AuBm4 z!(oYTOSXGI-F-t=8lW4^iR8r1AD3C}bQ)JPmQNEM z4r}CQl46U!ZCE75wp&7QXWPy6VMK|hYRjVThAJe@_6e(PU}=(Ku1}TybgtYtG^A&r z&@{@&W&bfes6lr&AU_SfSeK8BO=&=ls@465xe8&@q1C6q+!)l~);y6aO{vkGmXVs3 z?zb<9sO#!c7AL7Q3x74FI8qan{ldmmwyq{s<0PXwG5rL!dAc`4j@a3&ciLR*$p|@O z_Uu?I>v@6%%l$V;96!E!=NW5GK0XIjrnX~gGt~-yy~4-z958yv#jHg+wDH-&-!fs( z-7jpcg_^dSnf(;=^29BvsebI8HLQB7jal8#Ly20pFx#+LLX)!{gf&KcT8y35-!VV! zGa4y7(i~Y1t5Kt?)gRCg=<0P=Mg6uXW#7u28ZeUYj_BW}&4@Git&01808#onzQa>u~A<9lULs5N)wyUa^KNWPxwoKZ5dg*~ZAQm=G&P>Wo zwgyWhXBd)F9LY(3QL-Z=Dbsp^W@cvCw#ayygh_IG--Pao zOC1@utqsV-p_dxB>p7v8O=+6n?~YbBQp_UBRu zJ4O?46O&s~KSjc)o7FObaxQCaPE1ZoOtv*wTNqMOQXMINlVwL{QikS@!X=gtg|S(v>s#fE-z zSSLl0q$FEh+LFH4EuXH>+qZV!&bZ|^#Z!JPQ4Ia5a)ay&qM>aUx1V5L@VQ|WQBu>}xeGEkZpmH^>WikzWMWm)341#ehYU8SDubF;wJ9Lz`5@>K=#a8* z-%+$^zzn**0r_(3?(26e2XjzlGwn0Dc<>GEP~I^2+0OqZ8aV4gXJ4m%1mG%8nVE6tl_5zW?2+@>8P00=@z9v zHSQ)VrqHl~t*vz>Mea)#sVP3(NB(2@H|iVPsB++%l^u|;DF)Ehjs`?|UzH}c@CyeW z*LsbPRi7*=pNZ?g^xHSme zj9IL)Ej2YK%Wun^pE|C!n%wz08CMVcIpu>1OjfCqLG~(!tZf)Lt3QU2U?D_Kuwlg( zJ_T*sNtA795mWLXJX6#f=ERgFhr<#J9=z_i4RrfQRI#d73~LNEVy2+Z5Mq4H>FW&E z)XWUUbr^kI9q)0ddt@a7X{(Z23g(J}k=;v`ZyhdAAnw!06J3QfD39a>;+p5GP~aTJVn#VlL)jb!9lHrk&&AHT*m{?E(aAEA1M|Zu zO(n_~8wL(YvyGAmOb={}k-NNa=jr2TBDz}DQ?in_Xai9yoN!KXDz4>3uS~?Z-us*= zbJeOYcXOBfU6;tej2E~0+Q}0W+uD@sB-y68+*418H_%p>JKd#Jxay2@v3^d|pUP3S z{}I;A<&JkLcj*3S;u$ACYM@Iwy5YbVidv4f8s&8VrJRU-rj|o{6I>tywo9+L_Ft%= zlSrNq~pcRrZK@iHk z3+zMaNP)EqV|2i?I5?6m2;&5xP5{b)p$RbStQ5o)0r(l@SfF8mo`9zTN)u)a0N8|B z0dN_xEe=d&3cwJ6xdEC2?k3C>fU*fYMIde56toA%CIOfmAU9#Zj)RlAIv@=|%z!co zE>Sox0Dl972E4Q|kdn6Au#rYY@uCQwrb?;2q*s1*R?7 zIK(^Ug|mYAlU_I{0P+S3DE^OLm?Hoe5$1~=CQ1^7xg28@f7b~y0)R$fmH-1#06X))+DX(l-X0(N8~GzY=nO6Q8L*UqXscFnFX$X`Zwi()eNNye!Kr%S$GFfGE$~+^@NoO*EM3R|g z1=&JAA*aYaK&0cA&(O)Go0?7gz?a#A@sw9U3VdtBTZhd$b2W1pbGUh>`H1Tzqfn69sKsRx3k{PfBVl$Eh}xTbfD6)N|!4=uJqSCjo%4< zC+?j^@2q;~p5Iu%4=nzc@sVcloFVtr^UYooRRTe$5j+wb;@_PX|g_6hb3`$qc%ySqw@Dy^!_tFofX z?kf3JZdR46j;}hW>Xxb}s@|&ldo|x`{?*!78(b~ET1K@^{*r$y|H1z8{%QVO{4e>l z>ZJNR)oWF6Uwvrxkm_;OKd8PPFy}Wl3^gj(Xk4R5jS)3sY9!X!P-B0M^EDpURBHOy zY+G|+&Cr@#Yn824wN{5(y=zUXwXoK)T0hl(qjsa(U2136eq5(a9ltt5>ddM0L7n_M zzt;7u+r93Bx~u9s>z=NAzph%ZSG`g7X4bn9;2Tggplv|^fN=pc1JVOF1YE8!)UR8= zYyC;}=hfd<|8V_t_3tz&+n`Q^mJM1r7}Fr6K~#fz4IB;DH^^ylt-~2x{VezuGYAE;!l?<$(^!kIlHE9>=Gj`i> zwI&@PZD;m$8l~C|(3oCcH>*d#kh-Y14ILrl_jmi6Q3$_98soPQX72Hkd+&Ty~kOxen!2A!#q^^QH9 zn&4@ahlMF6kM(exp0mVkbE6pN7gzFbTsvc97B$*1I%dp(J{D7CC-(vK(+kVCUfw)9 z@cpU7TlBKNpFi=G(~nIrw3{JAjWVRNa^L*!$Mi#Tns)9Ls!HK&yWDJTH62Vx{TM|0YV`F_UQ7^=~vq+}b$u6U?kA1I?*L#_7b zL_Vr*REv2svrlKC%;Lu?ZeWogGn!4KTahTW`b>3%YV}iXYt)h3)#}#%bTf!T%PO)r zocb@37aehiY-iQiu#wE>$E-8ih$vRwn#={pk5#%sjZ`c8sg~(#=w#JyH4bqvXG29+ z>#&{$c!rvxMNeG^_VOD9S?H*gK(;#|ksYC8zLUi|-+I7qv4-ZhgC_=c9krR2 zwUdCgHCatoZpX6|w#)M7h4=bxww~L(?CZ^b=jE>fkj$(Z0HwRE^EMqIcZnO>+B&Kp zbxLvQypWy1M!DQgb47Lv-+9CnU|w3-R2?I+F(b_CASeoh@*!Ieau1RGNjK;Y zoIcg@g#!%9Nzmf_!pB2cN9zvfrGG;!B!h-_@J`yKOxeM41#KrQ&6U;4uBJ?}B40Vz*UZBFN8D6>r}jwh7s4}Cl9{+K@Am1FQ|l!zIm746 zitH~*K0B*ts>fampU4I8%97OZBD*0m^96T!F!nS{fVQuZ=V>}Kotg$Z)Zb-uYG!q$o+wpaqal@Q&*%~rv8XAJ#6Tn zZzy}}s&E=TgYE$jOJLW{&BKnNrgHmEJh*#ckV-m-)M$kw)OuE{mE)Jn1{hK+1zH9Z{=wBd2q;tYokJi@4U za$H~^UJwf|=nJ;CrR=Ux5>;EX0!U96^beUkiJVjqmrS_1U$T{A!A^Yv>ok%YqknTT z{m1mT`h*3sCYXiVYqn{po}FTeBZ={5>KE<@kn3+ae*sMk)SS2y*Q zjP=)=w4VI^*}6(%mG=kqvGtaBkDah2#!@f5R|{y~nj_b6uzGO}A)fE;fSCsQD?hs5_?i1=a{!*{6{$wFlyBAJSySpbGCXuCqPS&!pEwobr z5fGIbs(vlk&TI8-fpsG|U@;hMJWmUjwISP9kqSpS=Z0kR zgNwBtN35n_xnPo*1$ZnH{JJ}_8JB`zur5x$(=&7eHA2H4NR3ahU}!_Xz2Y9iT3(=P zL-377lG@N?2dD@nHINwD*3=V7^{pO@4_4Ns`$V-CSsHjO4)P06aCR_diu-e>6n?JV z{BnUdD6*(lkHwHojNfJ_h%R?UJzLCvYp5RN>ChRt=>-I6MI$cJ4zGl=ve7UE49%MFRjr ze{_ZzH{PMp=vlB!e+DZjHxN8Ib@8XHM9^$IYAi1J>UAK~?qSz}pY=s%HbM0>2U5=f zE_61MKP9HaBdBpJSxTO{`vg!sNPO!F*5EoFK#X6}mr%lUUdFq`^mHdZi6nWSfQI6< zndI^D%HzFg;VsO7z$l{Dad{?wFFr!YQP0o-a)rEqjTHX2mK-O{!5&3WwSMZMuL&De zaVpswL;}-iZ8+`czK;eKK9D0b8a}jwdUz##{ttArKrlJyvM$u!Tjr2$XwbCY@zyJo z`mc$!M1?LM6Jbl-2h5V!?(Qmox+~}W`8{L1TMN5-?|0^0IJX=3#+U8xK(g=9r39$z z;|}yF$4ow<#T`F^`I$$Nq9|~Y-g3yElZmB9V8Egu0UM&rukxYNdpq?d=#A0>%m>B~ zSbCReX!6Od1ADA$Z}dnMctYH8(g|O5_z34aJKTpuw9ayqvmlK-6o?NS;0(v`4|eAb z$IR_x9XHNI`=H%pLM~Y1q3-<@O_c+MUg}27iOM~fm z?s4B0jteB0&XAwow+tNK3MkyKitZdkMoMyevcX5Hu{%*!O#w}f4G z@9Rjupsa&a{}4)4Et+$9Y-g*wNDg1p`kOV7l~-D;l9WZssS7OwlDD6*v1#&^h1FAuDNB(sZEng#qAr#@zdttE3caI5zj)JgJ%Ic*ydOnP%`t{9 zR2BUG!Ov}MvAlcnohGwVQd8yv`A%D!p1RC(Iz4KzO`R@x-x+p%vUSMhh_LQ{>NI(9 za@2r@$)PkYb&chlC3kk)*dqD!!v}MklML(5AYz=(f-X@OWZt=L%h7ZjW~>9?^%xFb zcL#XQ)mSV*?n3Xhao-Bi6j@LADDwM5>I5VB+4;NEG>dIaHa}gO_xZAKeYsH#hPToN zxrN`1yk2LiFDviW9c#{czja+d^?_XHaO+>@T1`h(pMLa0s*5dju>wAgz#|Hl!M0)b zg7j=5dkbLwTP#x2ERO$T*)p;>PUNv!c_NdXY$*E5%|@7mLPrM%h8{X;-7TNof9UMl z{iB1dYT^uYOvd;P;nslz4avzV$que7r6*gn6AUS78OiAut{SD=PUIV6x9?BNwq)Ic%5d;&NifLY7v&S)1xt_m!}2|%DJJCaVml9o+1)NKTH=R1G_S1`?PeFy2H(GzLu z2E)CYw5P;sx@-N1^{QrJEdwVv|34$V5(dakedtfs{A)P(qpT9x4V0z==eDDCo742I zdmwuZA&9k7(|R(K-vfGj=lHQptcht$=8&z;={d)U%Z)AENHyVu$!n)U&h0;MOjs+m z6HB|OmhpXA-Vv3q3T5-W^t4r@dN$;h;APl?_%&N60d zOqi{i9JV1Qcki}M+taMDd|_??*LNh@0vCsm>}csQA@8Bh*uouj@cOv?_bormU5=9YdvAv5V(GNbk<9=EO`#rWIzijEt=8%=MestzHmqn;@H> zXU?CNzR)r>KJxt$nw^`SL=&Ow@yoN3u0WoE(b#@fjFaXW{gq!ICP{T(*r zA@H&Swi~j0{}0GdYL5?yaV@I?O?V$jecy>Ll)VK@-+bsrBP2d&wSE|IfVJJvbXr$* zcQV<@n#PdP?rP>eQr^ylAlq~~C}QeJ>v(CDzd4EPQQVS|X}fq+-qhQWl$N;>hKx*G z^lihg9jkZl^IIohnRuj~wNW3MWHUy4YJE&SwID&Xa;G1J$S)QgxOG6!8oG1a5#u<_ zx*VVv>7|N+k8dddN2k|slEHxXJWx+eSzCugBZ`C@8+Xk6#NxHR znkMxo?pu7R?jxJ__NGNiAnHgiB<^;y#^^e(4m1ev@~$mTemAGv_ttBL@&w|sv&KdC zV)+<47VG8Ju-HW46Dm>1Ku@oer)SM(YN(cNUI#1}oyj=}pzpc|eUCM>yL-+s`ma4x zGLS6CEv=yH0@h;%bft*wgkKJ_GDlgJ?+IH4WKb)BMX9sir)*p*?;O_bAnSOj0;9RC zqt;EPU)UeOT8caB2|DU0Z%3I_wIka)FAUFA`~_%$jSoyvVbq9f?sFy-HQAFtXL4@5+aN0vN=eptE*^ilB2P zK}?xb)D6S{MB*&#Y+%FG&eE$@Y-bDLC?m{;ozxyOtKsfsFrHHT<}$nM{ll>dp1PW@ z^k&{2r|Cl|mF9rlHb2g?&g-Pnmd$ka9I-At{w(9zjb-1zgH?Ku=6Q0E?0v>r_jumZ zRSMhHgW~CZ(wBE_tHKraNYWC@T7Y{j(X$1f!q#+nVUG6jXOa1#KlIGcvo49;tJs~^ zFC0{l93jt&g<-C5#(HkHC&t&G1$$;=)_Fe10G)6i=VCKYx!m)-H8px>Ul0!-bsi~s zTGzAOTefio`Ta<-@$ti>bd}ST%Z`^Gu`e)Ud3?ljF=G3_D2msV&E3yR(7)OI6K4j$ z$5qf*Pow!~rl=LQ#|&1$VytkCr?4)as5bK^=Y(?6x&A0!=QQ16drDXP1l4}UtG$D2 zFN_TLX1IXl`RJUJ9OHV|OD^+!{8~Et_)#8vj(%RH2Oiwtd_(oq1kOFpX+zfX zNA?~T;qU_5R<*We)>|aJ8u?Luuc6u!_YL!K$RwNosjR z#_U;XGv~u;O75_==ebC0gjx^q=r%?Tro+jrRwu8qY@s%&)23-(Ou8Jn!+M}F&HU2+ zrPw2etJGFwE`0_M7j14%E#iJI{K-HX=W$?Exm9{|&OkcR^8#98E+)-Y=LvMgDUN4p zUNId!8?e|GVzIr*$wE^uLis3cD)bDZ$FdV1bK@_BI2fJ*c%0cy)XF7Z1fx_-7y9)N zl$pIw1lF35Mp5J0M*x|M@t1W#T&~i#_2^Y;Jyk2sR?CgI79N0Zv|T>`;h8(u)t5R%G zj+l;R&o9~sm3?+Lntd!A&7PBuX3x%EN!UlgN5fnz?o$_GV=)QbKVKkYr-Z~>bK`qaZPgdJXraRgPLnf&Dx~HIVquK|2FAwJb3TK>GjxNs2bD92N|HE3D+fjH+w9M&w zcOFpU`CTzNOn+!gtLe{W#|`(Fxz0cGGyUODjJwD)D8-?hi28;)CV+Zx2Mi%q0eI4_ zeEjjcBOia@F1L7s3#e-+Mh=2(5v#la3jkEVsjs)}-+dUfsp&;m@{4TDPVkg3=8j$f zA=VQP_W1JgBd+&zc_Zr#=aA!Ga!7CLy{qNblpi%K-mr(7KD6T@{WvnFGpo zG?4YX2WoUyNywm9&BIP$rB(JFdthU&r)i2m}YJ*zUe--onbK(^%EVkhX9^>U@jWL$uGwL-HnDC#hy|)=f+@B(GSJ zywbvbMs4sJ{d7|PkdLjq3Okxhxr=fSQVs0@VN|$rofHEehXHs@>rK=e8hro^`S;iF zdCG%MPJ&Q=fSFXoO1cqblQlv)2}=2asGZR%rC&~2MmQ?rS@cW;CfLX!M6LZ-g>Emw zp~ddU=E*^e!p7TJP0(V|y?^3E^4EjTwYGj!I5LYGy@f$Ks*Q?F4_NI5z;iG;niqZ6 zjY7!cVwie~h3eT4v+1QiV1ZzxDJ&FhboM-UVKy-xnfCzPa>hKcog?$Wc4o~3+nF(M zCFH3?ULkIgXZBbU!}A^jTMiEfQ=V7&s3Co#R>@_`T3Ug5@>28o662{giLj5=Vdfb! z@b^Wt)&S^zK9iW-Vbt_|zsx1Do}{PL1}LCv%)RAgAKj;)15bSlcP5VpSu&rAX49V$ zixLt-{3fo8JhpUW>I&=T0^;=zoD1K;jY~GPBsSCUZpdN2!%x@Lc;DY#Vojdcc;Due zOZV-u8G-wIWe*_#EP}6k>U%|1-lZGw(fOBdM_JmAdIs$&cDy%}>#DqVny$-TPMxNmVNiEYQdjc-q)yH$N4=&&&UA0>Ki9eZ<%tsRTz z64tNq#C*a=YS8f7XOI{m6qshY9Uff`I7AlKRzJ8#UqX+j$bW*my8!BrAbDB=`&};! zuzEU}qdy)+rvw4tIQgyw`1i;NkXLWwDYFeINBhD(X48?rlwFcvI;I&R0CT1m$3ov` z`LkifSyR}&9@$0sQsZEuX<)7SpxHkY)u90tvN6Qq4(Qnqyl01V0T?R9m{N9{0koUMop?$O&rvRVBZmgD|^3_uY3RNsCMNa{;9hvqs)~fGLhBR zvkjam*_gtFM)WJr&hJvzRU=2UdI>oCA3G^up)?P{-G_>O1leppsaXe=@l5*m_8@-bB8Bs)K)Y}J@z zyCrMu-lgT>gyr=Vd|V9g{}Dpe9-cOsUS6Y_I}+XT4Plz_&xqP0mYn4C4tBU;J?qE6 zadgr1IC38*w!%Et&L!S~m93LUGKb%kmMjL`78ya37u!0h@i*lqN$Hv~Z83ik4g%a= zctuKDvYTew*zZu8f0yB_e43;$0Y>7!vK!>sT8%cV@vI$-hh;{y2<&%>UwGm7&YtqE zNf4*yXcV=rsLTZ79w1*nyW`j*%2~Dbz6>pkug6)=1I~j^6C`_0tukHSeRXWaMRbk|B-M}Ck^4~nx~LzV}icXi+q;>C!yW_vEcvQlEX zuv|j5m_b-&PY862*QKN1>F)`{F46Tg)vxywgTuVn_F z+bn$)ik?AZQ(c}unj-u+GiVGA^9%xg{F?$B>m;ARa5|-=miC^nf#;O6pz?;4>eUPw zhrF&UsLp-j->bvEh4ZLyEQbHrmnoVNW^w7->S?WfE_=70u>uF zBiQ^IC!~lJ{^ArE^7AJU1bL3fB|1F(eHzfs-womhu>Ft0)?fl_N;f|q1fOCT<*DLe zYx}}e3ncwm!iJ(Rg_OPira_3SThgfY@ zd|jI`=4fDyrU|#!gax7KW*g16mU|>eBaa>KTv*p`Lc#StOVl<$gGgXfpTCu=J&z%! zHi}+5T$Pe>WKBIiOIhSl2VaZ1wmow$X;KuAY@YHtJIQM$SAX<>wPnBvJNxcuFD>oQ z;bp~ToPeUH+~DpmZE%0i4el@p?tfNd5QO;F0V=pVUF`+4;B%M--Jg+do)N6scLdH` zTp~z%G<3@98SAZuD`bv zGc2~w>!RUez+9K*8(4)kOIg*e@Kr11=m&E^2+}(X@W!;0h59jy3hfcBm*2 ze>QQstV_{wbMf8~(>3qzkYdyAQt&RLi_HP6f-42<;x?KKB@n1|7i(NAHs@87)j6%g z(J+9ahg{761dQY__nWZp-yn4p=KqZ}j1(7~s{yuGotuu*6&(J{D~-dw2LCM`Jd{C zOy`FuCFP;CR2B+#cNV)2rgM-b4LeUzVB9g1OAigCo_RhkD7RjF${*tT9E%NxQw7qP zG?k90(jeli&Lcoyj-Y=QbCme6UOvFlps?|mTxa6|aw&z*-_zKGI=pV*L_+uXz#i-2VLeYnJZ!3(w3Hh0qs&gN=+pXI zGS(K;0p&HEOCQzkNbKC-qnze50(5e#`DbYb*$P(~Y@bWBrX?n&CR=(nO;j7$iu~4+ zZIDIxzH&T*dRoGS!8fk{2TMdAzOkhgS4=3$WpXd@^nS$~mx8^Qa#&K|E?QV3VyH5t zlP@X0xg_sRR-xLW$&r`>pYC=r2Fu*tsldPV^R_n$ zYqE|o!_Q`a65EPQs%1#b+D)Mr8?{$x;%fz|hFY&>_m;|v0QN>Zu!>eZu9cmx>y8;t+KXvj8$fv%q>27wL|*h6D$RF?>?zX>wY0Mrk#f2tBVPl1=`ic24lrZeYi7DF_lZFrB0I9MzitcssJUq#n{#2>w}wDd zgkMrW^&Nw0T0iyl%{Mu~W}t>`!2_c6W2J zE*z&n- z*VLv4$pA%Wz|y@>{%#odwVM(;3>XE6WHvtauzMxuhdW5mzIQ)0XQm`&CRzqb@E_;4 z%6^64Ld0=*ZcYo|*=vSd=t}r}t~3}i4K=Q$%|Xvl%t36Povc~J?H6e-L<#qG`sHb} zcW-zo+~fJ)@B|5Nz~?X#&KOt%?$@QzP&qj@G0kE9Lp@?BHECG{FM_vgsNVe{MnpFU*rPKI* zSFi5bcRlag=-&Hmhbms&ckNJ~<@%nmZr#R*bsE|A(D^W1e3-fE={qql%WpY1?%oZ) z;Xk5vOw$3juLrc=I>O=~+_6=woQ}V_?ri<~w9V+?t3w6|vOQMz_FV6Ad*l;K;i|Q? z#8qqFL-9$MIgG_ttsLSiH%nUb4v(fn?r_O`QxCakVg=?#!WgF>DKd+u-uO@F z%IwtdSYY0Hp!x+&X4Us!VKzPc%AIajt*QZkRa7g(nORvCX22iLxWjYXAB9cK3#5?w z8(g-}c}ON~v4 zTDWkEb@4@M#g5GxJ1lFLrzXR_XI<_G2eW*8&Xdy@FHT)#S-dC}(9pVBYZ4~-sqe_^ zmM)A>n6r2ql%iC(lFA09O6t&5`8n_o<@vG|E6bK;l~Hxct^xw6)X}xkb<%a$_0b*EJepr|tXvidRl zO#KJ?wfYVEo%&pT9>S;G)Zf+rq5o6=myhTZ;M2&bxle1Kjy{<_YkfBOeC+d33#Iax zL1!=`m`WQ%XG0G|UxZPK!6wXX!&bv3!!^UVh93<-8J-(FhQB0VsjT#-WR@yRcBz(B zPiiK$l=?}-rC=#cijv}`=~AY&M%pNCmUc*cq+H1*ot7?2*Q6T=rt&~~B>gP?CaKa3 z*+(uTzahURS3+2o8gd=EvD{p4EeFbjoN!z72ev`nL4#=-Uh1LXDhl3>cEZdaYJV;7yqSPTDe^V?=D7Ekmd#BG3r6uC2m}?OQ z7I=ux5VBuM+aFc4i6d4W$-t9_aOKMZR$ka;*eTBEL)N-*i8R(3=C8U?QRwQw}f&2DOw(#}g zKq(L3s&e3@;BHo>1RG%^YGNyVbE3S*cZZv?eSIFu-jJTP&URi6Gc1M!931wgj3pUM zY~9&RgKKy8*{go3)EVNS#?`b2!bxZ$K(?+YP-e6cAk9w@C^97>KsF)-NFQ|0X!>!J z_lW}IXdf*O!Xo+-FDi*UvIqWa4(P$7C3Rfk+){Bz99T;bUbqg~_+?4YuXn6joDuIE zJ>3zrXmMIv;s!E#JWXD?E@h?V*oQlIDTb<4SxCd?PMAE@l83(QO$+;Bja1Z8Y{v?< zi=V3N5HW5_?Ns(A-$`SQ#=i9u^Yu&PwPw0j4E=~Qco7_E7lqOlB@VO*!e9ub%D8{{ z1@$B2M@%BdtduCK9Hi3`ETIinx<8%b|2WxtEGV1#TBi(YTE(W`lBZ>L%o}3uCc$wC z4EqY*B`-BA9b+}F7XGawzVaTe?Z-8L_IeWGF+beom2y+H;F07 zA3nFSFXTUle1lf7@`Y>7&4&+s5B!-O#a`5IYy&g!4{3oQA$&U?0+ob4G&ChqlX>`( zKJOXk$tr%eFeOotC-Bl6zeGtUafqBSmTp2YhBQP<$j0uVW?rkE0vjIdApg&h^R*On z3#tqa+jYocn@*Dw+g%!Q>(>JpAK4W6+(e$Ei1d)QjaU?O?VJwG#A+{Njkj3=;qQoN zE&U2|cU@94=OCgHV%5|`R2wWOS0zBU*xVp9qxw~GaE^BvGc1u=d3N6$oMQrlb4ZRP zB`Z0eDA&k){jdTfbdODe;&1U7%xZhAOm?-i+5ziP71o}0#`;u+bzq%whv&A!hdydm zI5nGDHEbN@=c?G`YsQ|#nrb!tnpMPlF)x*vSUAF<#v=sBEX0z~8^CM4W(xH&tPPJ} zGgKfPMzM+F6u$3NDH8=Y`)C#pBPQW%h6in%hA|1TPO5U!B}(T-qlS03Xn3iTg?P7)R?BW>3ru#3xjUzelte_V z$x6WxqK!6XtHT+ez&^bXuIK>0AjZ{`?6p)WvU9IcC6(+)z>XBeX0j-&DB^Y0D)wy? z3!IAiGquMdy16;+&U#!ym=b?788KF3X{{a7!K{1ttcqr3hKRWrb*;~^fqE5gpMq5+9drRZFSg|>hDelJA63Cm)tGi)b(W>c z;@06d1u;(as3ac0;t99~VkWUK)m?0kI*Y~V6)@MWE|%k}pm5J#5uUy9TTxiB5;ESZ zAi8R0aq!Eyt*vk`;^4nV#0vIa>ku}hd-1g%(S`dJU;7}<%;IYU!fGTJUrV@NQG6{U z3h}1mYhR?lUVL2!(TpD!UlY{iDZVZ%R7A{YZ@uLZv$_Y5nCw#qEs7Ht7GH~KGb_H< z2}Yf%_*yRv)m16J_7VJa(~GYSxL#I#E#Z21@wJRFEa!@^eTB;Un#I>;gogS~#n(iL z)5jKHmlf*izc0QnC&c-b)cdCJrcYAw^YQ}mS@|mFVXct=KM@ZHgpH4n44$IJU2M(& zhXAd$7>FfdX4=sSj!-)j5Fy5n0NEi3k!?quNFEydU0jVt3OhnKPe!=7A%*`Cp`De&mOs#VC8!Wjx$RRcV=zrqxHN1dm4IUV%9XG+I z2lv08;MqW%WviV@qKM3CsVxbz1@g3H7{9a4F4rPp8E$e$;=zc<$8?~{Z{K8 z6O8dKcYbezF=<)LcPC&B|7s*i$)|HupH6w#{V#sN+bmlNY@(*=@v~)UOVme8Ao@o)B!3)jr!})_IeT(7_>*p#Ts@Fz z6(nazKS`_&VRj_emm(HPV5?+1I22ow*wGing30j(d@ALo9G;q!_l$X<4J3@pylaf& zs0P$=T%UK0u^bQ4XGil=--biW1d*2vYLwEsKxUTGzRVPwb{Qjq)LKn%7)=>pH=Ep&Q>6Qv zJ4SWkYS^v}Ib3o$l+`l$=F9MC#lMVNU8}TFa)!0eM9!Ri+L(*<6`&R5IQMzpGlv4& zYmP@!j9f0c#I}yMZItyHq|a9BZ*gsR|9Zw)NnLG7iWoB~CGtkmKAZMg`pg_`GZ!o* z&r;;w4VH1dg0vN^t?*_{_ZbLg?f`bG{OQ@tyhx)|!4ti&_-p^Cw4Bx|CIrR8E z@4$vEbqOOp7y&n_b0^l@Y23&+kyNbPqHaaq3dvSr5jXJai|AofgGCLN*2AyC4Qf!> zU?!Fp>x<=AfYAEAbkQEp;$hJ~hxV7W_c8^Z`e$C;DTR9E_Z!CHvBR4Z_+Jno(hUR^q!hBuSeh ztZ!1yOA+J3U|KOxYT|sW*25`C70u`6yNfo_npj%%usu@pvM%8wF{O`S6cVLuCg`oY z1zO`IXT|%0m9<2hHs$oya-BtAxgzl=p`(mmWf1EHW3&1Ag8jugc4a&HZ>Jj49=x8jqvl6THRpo4jLk z1Nk;GYq^70U2bB!*ukqXm$L56K31*i;+2=I|H6wbe{Q_P>nYdrq~jmFBs0tYN2AC1 zH?OJWt+>eejFm>7WTlbItRaIkMmwvGM2tVP7{?G+q)C~xk!_B+gtramMBiXRj}4J^ z(c#h6@#e(FAvL@{eFLAnhMXO`C3SzwPGyG0Dmp9PsmKgpGF+uHmDBOrz4?q;1*$;} zs0B0e&v0WJ9=eUA`Cvi*qOpmz2Vd8bV=QO@Q^3^xMe`;w9n2!n?~NojZp81C=u4Bq zG-AOF(%GE94aO|M-c96e=G-E%nErGZ*IGEfhZLQR<>Xlf?&Ek3>BGo-1gry(g2%w) z;0elX;QB_=r@+(T8PE=%1s#;%47Px+pc8BZ+qw1vcoFOXFM*e-dl%_$um|h~`#=|X zg*sjZuYuRWesB;RLWjf1vq+DS9wj|SdYm$8@CG;mPJ&ZFfz#kE%Dzkb9(W&o06qlW z*y1D7bEF@Wo+r(aULftkj+cqJ28e(dh%*i+KoSfA6`UImMu3q(d^?I%{5zUdd_0C! z{9I?G%(0*WOdxts1dU)4xB*NCQ^7Ry-b8vc>2%UtNN+_3JTYhC&xzXG;^o_D)qJeD z0BxJ#Pk&z9M4k?=Zw6byR?rEy0pFszz@oXpqB&_j-1Fd`2lqU<=b&8{&9Z2fg?k=% zbI>2Yc_o^N79QO3;Eo4(JhM=c&Tczx86qlO$cp*85S%e{SMa_b9@(GY~lMoq#?uaBfrn?G#aMSFpY+3G)$vm z8g>h_J(%smY!7C8Fx!LKXiq&I$lDCIfUTetYy;b=?*-Bq!4B{ec$s>4k?sb2z+SKq zbb;RNK1AJzId733Aw5cZjPyA5rjh*y=?T)4q^C#~>1on;$@3m~AAA5lMJE1pdX=u-bvuF06K8wF|4gfYn~WYA;~5r&-+} zlc&IPm;sB0!Jat-kKRfu(e7?Mn#G$ryqO_J#Y?>C;YIPFg9kml=ixn9$0y%&Sv;4; zb6Gr>#dBFam%WO2JiL>`J2||Q!#g>= z@FD0%-;YSok$y~io-{*xfwYGruP=%GNK@F${bw->x5hqT>`;8M~ zUFP(}gShd4?jw_^WipW7ID=ZHZ!`fv>iZUL;k$29&-eky%gMJ2tN~9@b|dLi;A!v- zXa~=N4)SgWTfkP(3AO=0s+U`K7w30_Jzy``2fDy3$axjK23`mI!9j4CYe&E_a2y@{ zD4q$TcqWMA86Cy1w0tJ8d?v7bCa`=au)GJi9k}hmZ3k|bTi)lkN5mFxdqiyEwnxMk zZhK}um_WISpb<<0H-O2&=dx#tohyicHj&uYW9_EAO+Y*wsY`N5T{iWI zW~DN0v~jrYDE(3QMf%!&AajOh_$z&}1*~Fz`7n9>`{f{PX0Ubc0)8|Al#*^h3w%zA|X zgKNo`X+>|XyQ%XWI1es>9&BH1MX4X?$>=&BABfg63(OX@mY%wb(MMR)Tf6<7KL`d> zv&{G-cmpJ4Shg{;2TQaj$#3Bnu zD&mm^D-|)xA|^SoGtC(6z|b^fumelejKK~}O=Ee*XrLGk6r+J+G;oMXiqXKq_lnWL z!T*ZUz<~pbk$|`7g9wNLKR&4-KB=-9Wfc~$1~s4-On~hZK_g(cPb_kYMK0s4!#L|O z&dMxNv6^TY6IQ`GdOfYo5pAXKl*c8B4^c+nYDUm%a|&r|;N5Vx)u}z~&$1L=R=vDz z;bEKK4bA{wm04BaBa1()Qg~M3S%qg6o>h2O;aSy>XDvKy;aLmMT6osNvlj70Jg5Q> zs=$LPm_?~z7Nvq&lnQ21st*s!EJ{2mvncVP%%a4DGK*65;?91&Xa!!h7}IS$XX7~= z&oKt**-)vMY(o|>tHe{5aXXUdb8kt;;)gl+2v`Rm1&@Kp!C%Pp9QZ5v8`wnta11@f zbqgFdD)F#IkG1HrmU%tB{VU+B;A`OPfV)KWog=I;)* zmHtAISnM!=cNpg!YVdeO#GJA$UQ9#paDF1cPKA3-Shbv4^6S*r%v!G5CG&QB0EYD+ zH{dn%muq2|{3^9!m<_{h7-qvT8;04$4x89v6FY2Thdlt}BxVTXBxVTXBxVTXBxdx* zxPfCv4>r5<<1k0SPbT*~Qmi?Aqh4FsUsL!FyHL)s7-5S4=QUVdLR|%U^yuv)*DPoW)auWaxJ;UR)egAHqZ|Sv!w=;sWcDP@6PX} z-B`d#ao5!#Vo_UO>D_}l{*i)3Wfm#gs#M-U$5&xVytHgSM|}Zf!xX(Vqe=VavTgxB z8QdlD?ONg+lBH+)y{kH`XJDI&PeQ+hCHhaxW%b|IK!RBJ?V>c8X%oAN z@v?JGd$S-j!X1782|y#WA(IvDZ{VrGWcIjz4v^qEzzi0Boy9$WnJX;dPI(ji2%ZZx z^VCkB3{>%C;QKrWlXdIIuxkBsMj2VHzCk}LxL!Xin4q5(Ow!K^rs!t{Q}wfgTln3* zjXO}=d1A0YKQZ{WeqykQUsZ1+^)2@M^>c$C>gNUz^2DHrKcQUYxxugWbAyL?Ztxj@ z29oCnYxHx2-|FWEzthhR)|$f@b^l;Ca5rZ?3wqC%rLl~p`2hC}zRZ@Qz4DKVdM%{E z7|RnB+5CTaR3Uw&eoi6hhGDbPO=83d5aIV`9nW24tJR-F`SmATHBU0f=;t!>ji>jL zT;nEBb*{F_tis>JoTE927Iry~1-txf(SQ}jU0M+dc70KQNE^ak77Y`2$)4bM_@G zU3fhL>r_eR!p46b^l>%bH0dY)7WqOp2}>7*>w{tRsccqe$}l#_*yE!XyO$z?7sB3`q#b=hygR0Vk-EH;^ZyZ+;z|(1{sSc6dF}uJ diff --git a/Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Medium.otf b/Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Medium.otf deleted file mode 100644 index f9bae60e516de3c8f81372c9b663fcc51a5f38c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36100 zcmbq+2S8Lu_wU?YcJDe@*Ti+z>^gT>M8yJP!){RQ8Y|cvA|irxhz&($>1`2v!-BnF z7d47CM#ZktG)-dE7~K$KGK+VK@627W<@?_IzxObA=a%W^%sIbv=47y+-(V!5M5IJs zzP)>!^TnoSgzz@l{d=HKP<4bdUm}D)8a%vZYrkjS zwGiSU4Vn}6WJFBt>#e9E)aL+vHzSTk zh1#Tc{CHx`E`K4V@(H{_w_P7N1gEWep|13Zr$`JVe zT-ij<$@$G0AsC?{h=X6`!ma0CA{Ejojw{mPIo%m@-$OnAfqdSiNI?!dNF8- z*^Ek%SyCu$uhnRZ@*=umMrbkn&i$^K4gowW+Ouc)D~4+qT#r!?E*$kxEQat`2;JZs zk9we=;kj<*wF$x$cy}Fna!C+ggYY1{yMx+ri;$VyB45q8Q>YQQ3pL|zp>A9@gg>CR zaPNWakj4S=qv3+|a`-ir69o4Uk%7Ai;VH=LE`-@|&4=p}Jbw%6SpC)`H|`pQvmwnG z2w%d*$}WNMHiTb7xC`P~A+HCh1Its93inUp-B(Btb@${vAP%cD3#Y=x+EEVSM%0u$ z3gJ44a}?69gwP#zmG2>cRz7jxK%3%9|UMt;Zo zumfBvaCLQFh~;w*(oBYU(BE8VxVpf_;<0g^Sb4#B4*Fj1ch>hGT#6KU$Hsz=#VmNw#)9?lJJ-L; zzYKG&Y8>8)C#PZk!``v6c=uvs!N!Y)tlg~q4@1^=R{nnrVU8-gLc3V|iy&lu#LD__ zA)Ci+Uj4Ta=D6IB=aAnaWPrYX2G?_FFI$`Js#bZuSqt)fWb1*=Np{VyoHx#}9ed`c z!?hUl`~)sGPOPu~Tgb+WwV^Up%tUPzaq!I66`R{1hHR~|`TpNRwhq}^VBze_kUg`x zz{cZ$8nXGq)-GE=ABOI)e}7YcRe5Y(vn#W54Y0ZI4i~I9ZUT&3Yq(a!H~5q3&=+w3 z^zFssyt&fg9xk?)*qTyMcxLpAT|h?^KpT}I5YB=N@@0LbfPQEB!~BuyivsGRYz+5{ z;9_-P^RgVmqWZs=3wgSta4eNj);3-v~Q zP+!y!^+yBHK=c_Jga*SFHWUp*!;v5IM&_px|1wb2;Q3^^! z8L%@gM{ChWv;l2Gn^7U!g0`U@Xgk^o`_dk?8x^6wXg@lL4xmHm2s#XV`Z4qcI>Gfv z(P#<^LLuBhG!v~yktme&L-A-jHxZ?xmE1TK!%gA>P%!$O8^Mj{MsYsecoc@_a{g#5 zI*JycKori6FzYM>A(4Q(8t9hIbN@xXN`*NRgG2A>ZPhnJisrX*GO<7_V%(cx1 zvuJiTH#U2jJDGc$cQ&Zgz_meRSB0zEwWez=SA(nQ+T69T>m=8pMi(1hmK3jFL+)l& zz}4YAxwc$)u0Pa#CgfUAab9t^GFP3sp1Ho+Ea%$sU%7t#POekrT)Ee;U;q62^y?CY zUNi0ry*>9&CQl^+D?gE${o?A9}wZLifAh?{>fS z{W?ED{k~oP?J|hZRi+sP;V_sV2u2p6a1;yU>HM3G<^s2vBtJNRD?i9VRV?-pF24zb z-)HDKvZ3FR1YAc2a80i{#BrR0Q*thxic>>xx8OXWZ(4F*(C=-akJ@qGFjgI$BL$<> z6-I;21DFFa)@(NPgI*lK4U}iWXl@LfVe)K1E((@;%>hASk+I#|czhN#B_wVJd*x+c zgY0WL`?~7LUZAkASK8~kNL+R0?&>a|O9AD_UQJZhuerBo{f|3*TvUJH=vpWRa)NbT z2Ue>atjgA~{<^_R8wfo!ip^P=?F(UsXT$tji3(uN?1Hs%0$o5?(H-<1`UzTXNB=+@ zwOl>U#5IPtb%D9xQy%}3Fx!K;FfN{3z-4laxs}{zZYQ^oE9OeL^W0_b26vac&pqOv zaWA;PI6L=Rp;qV=W<_H~3q>16Cxwrqw_>1Tm}0zQnj%s$Q!!tWtjJX4DV8c$Dhd>v z6}uD%6h{>$igSvKimw$96~8H7DC~-Vlp19%m}R z0OfRLlya7GfihE>uUrE&vq*VZc}jU+NnP5w^l<6#86FoF79J5kBOp37Bs@4eC^jxS zJT5%M%d5MWGw9iUMnGV61hDRM(0y`rP<&8;{M$VuI3heKG{7171_Z{%1_jE$zJVdp zfpIgYh6T+Ge0%FVB_cK;Ffb@QHt@}zZ(smq9w`6zlz*pG-bY6S#7=>d17dqQiw<%I zz22k^dUMyyS%n~H&`Zt%sscIpd0Tw&+uJ^J{e$J-K5udfesjl~-l}zLXV9ka+l15J z-u9gw5Iqg9ez758Q-VU|-+s<2hB$+M&gz6XgMM#v@BcQF>2Gi4!rFK{gZ7~?7D3@* z0pU|Z0td={8YcfbKlgA3z60ephRMH!*4Kj_g|xcue*jFW%;oz;wU2LAG>#mT?^(J*P_*pL6a z)sB1j!Qa{aan4|jT+7+=@0d3uGW*RPt6A$-9h^Z&XVBdl$erG%d&kI-F(Zc$=@l0p zF(__EP;|uL89~7Tkx=cBfUqecQ>XR}3X2VhjEUq;M^VGDwav~K6? zJ3KBjC^{xKB08v*r~YgJMF1Vgsj5 zj)(~L^o@v|6&(^hE!I5FJ#bu8b8D|w?ah;CeHhK$JuJ*D$BQvX2gL+M#|KUE{GhO^ zM^wycs|vU!EpS8)fXA5td;T;O0o=ecbPL@DzUmkB8!AIDfdlY_{h%Z40o{RKMuR-Q zmpjNE13Gz|b10OG>WYsQdW9Fz!;wG>!xS-!*@`U1I_1Yoz0#;`plqe=sPs|xRQ6MT zu3V)oR+cEwDlaLoDXCIYzIO3)Y3t(a(#K_h%OIDbE+btwxfHuxak=So-{rZB-Q~5) zMO9t(k*ck#gQ|qRu!qvsjjGQslHJ?Q9V=rp>n7d zYF@2Xw^t8Qk5G?O2dTr<(du~h9Q7LY2K7PpE%i6*2kOV_KY0aTjjzp{`Nn(;zBS*2 z@6Gq;2k{|%ET6zH;FI}v{6>BUzlT4}ALmc==lM(gRsJUb1OF5MEB~B-!T-&_;$LfA zG#ZUoQ%B>b@zAuLYkK7bt92GWtpv9V;YdWvC=H$jg9+0`J73qeBR;0UnA{NdNI)R#-VaZH`sIR&c z5$vga6XHnSO#H(RoEPn>UEzTjW@0IG7Ri(5=&k9=c?*o)u*Z_aBc2;6D!ELno9qwx z)x@%lSb|h}M9Q_|Mttzx=*gk+E4Nuhtvk*Y^lh-T(wk_@cbT!E&TWNFf+tQE1$|>8 z^dY*gi9STPHgN>jbxZ8W9v5SMa#miF)%b%KDfeMj>dQ;*?0r?aX-Rn&W2b@G-i6m% zj$l(MRK zS=6TC+dZ)`D12&vQykxS>$D4BZrgoDT+d&gQ8ZYb<)L4aw`6I4{(=SK6h3j`qJ@b` zi$(8j5`}VDm3Ng9!*+ih- z?6p;y+1ZP;3_th8Qr4%Kwo*$S9o1B6scA`Rh9(mT&6-B^UGN!ot`I~lrtW;QRp^3O zV8I<*g?#)6pX-gMq>cG}`k)0j>WwF~jK6zi=LJ!#51m$U!IZ;)xo^{9vABhL#Pry3 zQJ777d6R8kDoa+bCD#~@g}fMc|2etnMeI%Ti72Rs5urVHTz4gGLJa(r2vhZ)ae>73 zCwIMw1bwa=MAAvJv6oa`Z&hD+C{$8owU&Bk*z9>W?xBqivMFg{`6#_qdw5I9#Uz#R zaoJ<{OcO_|EtaHYQ}^@aCZFq$v&5-O=Y4U^Ku_~$cOE<`u2P@e88FNwo#w~R8$C5q zw4@!u2H*4KHj502_w3F-w%$NXPLbh{rP`vFAIFvfn=h8kyw8cCr>*T1!w7Bdn5dHC zdSGjM2^r!|1W9qmi`EwST#H~yS_biQEsHH#qBQ*%l`l!Qris+MpUT2Z>^IGloNOq? z6uw!rtc!CE!cD#{zR&vDmue>w$5~$b==-?KOP6P4E*0BiXoxo!ERf3N&s*}6bJN6> z)$3Ae-p{vg#3oh2&va@FQ}+@)o!+udSyw^1s=iWm-*=EEZE#dieZV z##!OZ3Zq%I1GDnG&>BWT4YNoU0<|7I17>3c-*?-zFE4C`*|>$j99}d?TqBwEiAjqR z7cPW3c!Xb)za)QY9?VR^3ai>o>^=Ac+t%#ZT^Kt}gnA|kjiA38U~Mz3wWcSn#KK*r zy=J*eFZoCfB(v00>P{O-4X6+8NzJqY?M{0F0f6@=$8i_wBS}G(^dnlER)s)?rP}ab z4o$)yO!;_Rx=bI4<)yjgLPMg3S=4aB@q*0a3VL5Kn8A*%h?9Ks%NXY>$O>Q&U(&wTHKo6ea;EpWq5B<1}9; zWvP;~t;ts7H&cnEr6*On{NHr_S-hR3n6#EOB3P_O!LncF2Mcm?*vznysI^5vTp%+u z*3$k`#7c?`>z8ghB*J2nhch)LJ;fNXaMMnc{TR@=Tl`e3=L>PYI)7zGrq!fvfGd1> zH=x4)uvoZKo3J7$Cu_M;&|4QSAwpV)jZU!9AR8k$d*2~9dl|VAG8P)Wru6eP3FUw5 zJHwzR18EfWlIHACiYVUu^>;8xY0$oO=$&NiqTE%RlILW?nzW{sFakUU3rnVjWY0DV zJ02~8dT)up;M*##+w7E_lx*>YIy)yjXGPx9b!+qH&o+&e6p4)uLdjBmo&C_xC0`vf?BjPPP^07}3chU1phPn3Et%HO$$22n{ed(K)Kwpr z6g_u_F*thT9@7IF%(uWM>J7z=xFRWFuYsLOpdYzEt0fF2d#KwPZ2u96-SKVY?|}pc zq?A=!ntqA&n?SU@=e~ZA@&(to5z;M-(vysX(l2c^3C~WRda_KQn$=Vz@I%5T`wJQQ z#z*@~pP1-D{>hY5FX+%@!HaAWk}Xi?e%eAmHEJess%sC3Fj5D$uid_@aOPA|kW0Ce zaeAXD*tk-fucQ}+>+@mqb*C_KQgTwWMcPiClbxMyI?2ORir6t%EhHyfgoN&@46+=i zMgyQa0e5>}8yhch7qC*W|Eh)wr%Go%ZEp&dtR>KzHsPQ&q>Kt>c9$|i4;vNLKyex& z_X-wl0hhZ87FeD?^3-5p5Qx9<>D67uu@ZV&T}*ag$9!{Is-rlP4O5 zS_f<`ZB%O$fTmk5!V3Ij;g;e9TVMl%?NCTbd1`O>R5(XY*o03D;_cI^PB=o!gaG?V z>H$T^D+OC3q3%GwI||uY`-CYfVUCYK2umjY;j z8hAfctvz51s0RU@4^2`4Uc|tM0)(a_Ky?6!0*nfQ+GH8x(h=ZO07C%U1keuPRRC3? z1OxyUia`KJ0d~ZIpBw}tI$&A={Q$0o<{&_^&<+leET(GN1Iio(m=-`?jwZD+t{{=&Axl ze{@p;;28qF*S84W_=asc1}N(R6j;1&QTpcROFc?JkpD)~Xb$NY!$69d(jAU%g9xOnpiH zEpGsZ^|D3*%;=|@zM2rtQq3XF8O=@2kD5QKwXfEznqRe)YCl)AW7rOHe>@8x#8glT zI>A%uDFg@^!WQ9-@I!T>x@+|z)yGv2t3IcCX7!cTk5|7~{p%V{YIxTeS7SkqT{RBZ z_@>5FtwP&e8>Zc*J*vG>)1zkBnwx8WQM07xHy^e5DD>n0AFuiNP_2=*!fKt@`RM#~ z5xQvIUENQ*7qwk$cd0$H_O#kNYJXk(Cq1vPt8b!TtiM@@)R|i6WSyVts_V9>+o$gI zx_Nak)kF1k^%~dfSZ`Rpsr9DSn^W&%z038Uexmrq_=(piLq5s;O%HQsfx>jBrR4f%%E8jflh z*D$N$=7uNSG;Tp|pSxwa?QuKn_KVxAMvWVFYc#FV{6^avooV#C@sP&T8>cs3*SM&0 zY2!besG3x7;?~5c$?zsqo6K#J+a#~a`X)t9&Nlhh9l1AfZ|^?TJ;;5Id!GAt_wSp2 z)YPMC@1~zO&1ib6*+}KnmJ!-CR-m3Y8=BHZJZPB{Lq!zgzE*`|A zn@6NazQ<0FJ08D!@}BiQJ9_$g&h=d9`GqHK>DID)%TX;OT4uG}(eiZ5dtTUUnAbwD zc@S)znt$tuk8`w>sYHe5-q{%38f@t!eGqx>xH-t&>_8w?5nY zhc=zs^ldY$&D1uh+v?kHZM(glx?P`kk?nT2JJjx(_h|1d??c{yw6E5_LHkMV1KTIH zU(;bQ?W}dUX{AuD^tm>Js&lYohbtN4(g3&WfkW)8=@9PL&nJFX(stzoWtKKi>fno` zF>Opcy!))B%Yc)pW1|^B%IzDK^y;!CyoqAf*UhlMx`bw^t~A3F)P=OhSP~`GP)Ydh z{ii@}PpL;p8LGZ;cSId6!KA;{Pfkv;dJ?tiAzT2DNwk_& zZ6idd)nS{i!Ao3Jl6ks8w<`+I@00ON)Kd41+xKtN)Z6#Jz-Mmmxv6{tEuve>eZ~@L z+OlI9IK(P>1vtbH<&_C<gzi#fgVd3#!_S?*xaHIyQ7d(?9O!=yvsS7hHGCDymHwur-t-SWt-qcIY^9>u z0Eb9!3DOA3)gZa9koIa%3RrhT{e^-!f|<)mdB z;caG?>B4RmFcmpDhOBh>Cyu^(ZJ#P9D-*a&NM@LFUX`7ilAUTyOHEHtGffE2`9=i- ze6pxr2m%*J8^f;MnC{j0`4nGmr8bjat`^}wzo>(WG<*W>!WGkM%Hrv3$$UC$7onrP zuvYR*28N@UYLvyrSbG$gO7&nOO@8G!mS}eq?u3nYgDmHlPi~Iq!RnzNHs#^+)_M?; zk}QVqLkQ&#svP+qd^Tma zgPFThP3zN~U+84R-i6d4wH0-Dw`1KCshO1BRT^i|ZU9a++UIWBBn4!bXFX$YkU`L&z8EFP4Oj zH;vKj=r=??@4zV0Q-wPSUB9j$mluR;cBQXSAiQ)Z;=dhNPmIsa2GiBEMOm(t|(Zt)p)9KbT3I28R2iz zz4VXVb;e``&RKgE%2--Py~}ESWuwh(?byOhrhn_t6oxiy5fw7rKXS*@-#2eRWzyMc z7usG=n{_?WLaH;tT~dkCPF|{a(w){8AyFL|$-1=OsOOS0equ)8G}GVw*^PTo0u#UP zR9e$s#B|$>Xwxp@gY>TQ=Vkg~&50GXJf*4~3!1>0zF zS*?>$CAnU;ALyRZMdg$A(#K;uN!nm*^HWhK-HZM+7IhwGkgA{efj+5y{tm5vcG0)} zw?UVjDzyH#$3V4XzLP!{buTIuE+d22-@mzM=gE_Mru()JjvHx$951>AOy6M5;r#70#j-O1B>BW(a2=w3>7M!8FMrFtitQf0y6jQzV!W`0;q&`7A<=l)sG+Y=Lr zs9LE7ED$>4OI(bhHW65IhlND@!=kwki{?6g4H8s}!@QQvI7J_FrI(bYw9QDYoqx}E zeHVePlFp@FVV%ieY0@PnJxlkFBHA0Uo!K)Oxy`cex9RTEwSTn7tw5SJ*|+PfR>c!o z6?a`F(+J7O;O9zC@|35h)3l>OOGBg@kAHqa7rvmvkBQ{YZ`1{5@I(5me)sx~yLYai z6(CBO4~UyJeOlbc-69R92lRh+ej?QrebiFT&MnO*$6&tow@qnHk@BC|#i=HHH~#Rpt2S|y+P1CFMAIaG*W{U5p~kl1y;_=JfwbJ(>!%&7Gj|;jturez zr0Y|OHj;3K_MS@W3#9R1Skbv#xYR~JvH7woy!N@iF`ZDR{*vhI;j~2WOM`Eo!+?!l zJWgb}n)XxcUM?rvoEh57_0XCV0wKp@$?Ac`? zxwL|wxI@P$;6)^nC`*@llG(7z57}tsRZP#(Lme5K87ZTg(#nCDZs)b7zC=5D~P5&03;>&979ms9}?_B9EV)tO6g!Glvh<=p_+b?Y-ZRvpv z;sFl;;i-J!c&uHWT*mET!kCg8>1T8CB}ja^EFRN^^l}i6%YZ69spAS#o&DF(0g0GU z5DzWb1hIdH)y!7lL;9`CF^`v_6sQ8Hwj?DbrEK3+hulCl57A%G-Ff9VB7sjiDELTIbXwsx+0I zBL0u1I->TP#L)oz8t9zo^wZ}`I*%>$+J0UP)w{_zJJj*{EU~z`%90Hzv+?_>WNex0 z`@*8T4-NF@DdP7?(u+Sj*6KkR_meSWdWS!|{otw7+XIG)+S9B$ztamV&t> z$F=q_8MXmqo?b%F`A^2WTfigTeZwQ&T0}+3TWY&dG6b1)x1zA9d&qbrlQ#1rrp=-8 z&Fz0J!gt9*G8}8~XVB`-$@x{C6NEDO5@7BaEGZnfR2H?Qu-^(G-MryTh0keVhcaOh z3++#o^eD{bk;KE1H^`nBKzewSpXXtU`r)tbo?kmW`xA=1$j^-J8sy0HU{SQcK+-*S zZzWBm1^Pdwd{`iWOWp&}^b`7oYUwj5x$9Q!A+7bGYcok#C{!ywlRlB2_~LtwaF$7X z7IL6{pat9Mg5hMLjHuql)NIrH;M)Y|*1huYj+1|e!yZB#HN!*83(o;E51Tj4xoi3m zR!chhAHV+O7SQzDgw~f+=(~|~6@^2AiKUIa$gANnp|t__#dNeR^HWXvs1y<;b@#>B z`r(x~R95xMp8d%+FA_w%X8=8u6i*={gFz%kKE5s^GIKAHUVz9*&Fw|NT$BQH@rD!M zBe^k7TssF}Ai4w^_y|D!&Vb>s0SLbxE2t(OufpXMredktZ{;1>BYd3R9=CKQQiF<~`p>Za4*(1A z9l+YdFtJy#g&slw2?mOj@r)Hjqcal--S8&!qoj5Rd)_iVK(yWXCu44Oo-s0`?=xbYkeLEj9&7*YEs679%( zmh~&GYd7gZiF443rCy9I1v^zc+A9PayURYkH@Qpzfog7}oV55dRQ1BjrDwAZqKuWv$hMJ?eWZvfU7X3&qh0()&G-O1Li z%6@$;Y2}y%OSYALlDrPHeweUrj$Bm{fNKdzjj7RP_gk)JWvy2Dwqo}xIX+XM-Nkbnu{R_SUUwTZ~(_X06_8IvAiz&CX8GW-?z^mTCWf6-3L)HsqvbrDcl~ zj;fY!&E2uXup@a#;#Tp*iZDim zr_ByG1snu_l`0+?r%DV@4h;ohQz)A8OH9 zo34m@(Gz+$q(di=t3&!+BDzR+r`8n>f}W1Na23>Dx}tN8$oDya6%c0mcAT0LyDR9{ zh{IL&-h7iD0Rh|tLn}S%f$yb0wXb;!!`j@|-S*Vx&8Wavb}#xuPX|a5zJG(BWy2v+ zck%F&u&7K^Aby!V=xAG`*TBiXza`>LnR*?ajcagByvtLZ0%EKZ7fW6 zDv3H|eKC+CBgKcVez$Mo<~i$3y07+ZS#jv7L3dqBU7=^$=jCOj=ZX6gwkL$hIV2@z zW?95(%OY3qHE3tr9~P6+LZT}vEf;}(*FES9tXDQ%c$!+fVjyY0~zzn=gO$<;h#MO0N#MeBlc4Gi~hw`Z)_$tSsD`x7@UDihB0v zmN_7Gw4zP)$+;=H;!$-@PEKxq?wZX7i$9+a>OS2|>-;%ciN?WUL4IR4PdK`GSH{M5 zrmXp@w-N$R^+yB}H z>?eptZS3*4?|p%l)QiasL<`Ig?Qg49N|#A}Y`SZ-vHhbDu#8DCT(q-eI&ksx&yo)I zhL>rN>$OTR5BqWB72T2B_GU#y_aujCJJ{=A#~_uCq66(OH(;GT66;2-SiWGkNh`Io z|3Z1_8Ktt+{s-tLOOnf)|K<}9Q}!s)b+FfUZbG9RJ^0BpW`$0R+OS)+`+_)Lu>e-b za@vkhx8|ki88@EKIK9QB>%cZDIu*FiEZZ{xD-M(o&=1AZHFd-BpSCo`^IpY1e~LS$ zUjat2|N3k*Q0f-6%a@qO>m#uD0YVi|Yk>%@>+r0*K7;5+Eyud$W60vefSL7EGtHp3 zz1{ONM{8eE(vkKEzkheyn_>QQx&8(nkO??ZR(f_%IzY6hfi~LMQ=POZ$zr-G4e^x* zt1OF?^28f3P4i-jG^o!1T>>o)EQtT^GF>fKh~_|@R4epg_yCp(dDgtVEEBz0-bIzS zC@)DIuC^pEvZR`%nG)2RPLguMp`QXX*npK?t_2OE?VQ7Q!jAG_*k0uj-61I_^na8e z^tfD;^y`?8xuW~p?oVUGv2>4?z+k_I!Twqv?B0&w{twxKC|+gKM3QxGLUr~ zpt}AA23#^Zw(EoPB?ASF>IwB;OzS*gxPUBlwu_1wKRKe{q)AuylA21WkKr^V8Ock$ zWb%_hNY4X3xKrp@UH-5yaUJt-srYS_fbz74WIU)&|0Ov`lD(jqlO^jRuj-mHpq|73 z9V-v7ArJ?s%hB=#*oB|LF8neZOTuR)4;K?!4d|VnRx3YjB|a_QNxli|9D^Xr?R&R5 z+JZsJH2Kv;Sc_w%I`2fQwD_PI8MbS%UxR9!qgP>@T?XrRQBpjS!sg*``r+f$OT~1- z>NeP+b$q7(g&t9@kdCOe$6=y}!+u{@>xAv5EzPFu!UTGc{hc4jiMk2aJB8S($VXn4OggVtrD_`R&5nZ`b5++EMuTJ@`0gXewYm z=j9PP0wZ)c8?UK|YD=zzK9`5Cf$w$cV%A*U-QX$B@q6$6S(|lt3#B^np_H(^j?jLr z)jGSs)K`wZ2GqLj!%liYE@U+nvNId&o{fl#D*Br7}1CqH<35H;;^~G+CKfd8bx>BEev=?y4J-6cV z4afhPNqTydds45il8-OG;pB|pAQ1N@f$3c|s`UK)^n9aS6n`hGbog#@8zo~&jHFO4 zRKKYX-?w1UkzkSHOM1B)z45mj8x}5b;a7DHU)>gfm#5!kP#jlmGJRsH});0eB z7@e<*$r)Q+alfHOS#c{pvAylI|>>0WEtUNnp$=i?RcHKdTGePht8~q93 zlGShElKQu?y_d_~M11EBSVC)6p(Q1^@P#)(*9ri)z9f@nJi5mavP-?3B&gjcw(Dzh z><8h=zK%b$e#MR)am_iL=!^t={Wt<*^Ipn>&7LgHx0xi;jTx1Gz)Fc&5y zZmcjn-+MS?d$(k72UZMoz6F~Kc;D5Bt}3q$M4__}Ooy&MFdxSI4Bv}&T}qfp?!#nq z9}vpBlq|+jMloRq1j7qSPn&L@`O$RzW@2|WSIumBTF-X;`M!ObTDR8Rf|qT~WJ5Py zH}iY8Zo01KY$&E+1g%+Ik8Qf&6YcZgSe=AK7wk+kJ^H}x zWX#lrs3@^8B51`}qg*zC;4APO!#v%ZL}r`Ua`Zq+kUl!^e`EdE8DH%(>1HGb7Ve9? zVBAE&6bZzT(8LZzs!2~WVPntULS|ElrH^??F13^9_95DpK>23GuV-*Vtzuh=Ez+j* zOk_BQ``-R{W{JAN2&msO1my3iO6Q&U&8hdGLdz z)6RDua;%mu2^9QNepO70Z37C)V4JS|yYfL+(py^cLG@@&so#e-Il9040Hu_0N$@Q`F#`iX^$VS@($qff>#;MI=O9_l)k4r~h{_`=7y{7*e6>j`y>zpb{sU8HcAhN;;Bv-?e8etgyl;zlA<_A}Y;W z690_VgHMcUH~2-mrm(3x}}C?l2}AvCPAYQ^?8dMSbTS?70Xh8Ql@ zm9^9x{!~%L$!ipddIJA_^tsVn#LZMYmc+WLnk0|yCut0{jdU}KXaRs>qq`H+lsHUl z_GKu{5kO&PGUk?jgsA`@2b4ExNI;Bh^RMr-n)P5Jl7VsgPYu#gP2>7t*N z531Zkr&kdZlP=o1g~q<2G|_Lr#X7(3qb(#Am=SG6B+TgIEvel`%<@C6jzx)a`ZHS z5{v8)-kRFd;nHmV?DWa8V+>2MI2bR^UYu(>$}>JK14{;VXRKWdc|87&etMJPaV>3^ zpTVwQE<>@`o9lJ2Lc$`)EWxJ1SofEl*ghhk$b|4ck`45_{4EjOa4PG-R#2N(u`6AH zT^S{_V(lu-qd{BM1rYJ{;Xg~Yj4?p^u9AI~M9iB_9I2k;{Cn{2DNOsyT-$<*VUXJX zVQR+sG7{JVh}(1reJ?H4fiW{%sb(Woq7Urox1`#zA^mTaL{KBx-imG6RAYry?l8J9 z8#$K0moZf8PATH%COb>mjD=eNK$z}BPi4oDbNw(-X|=|p>3KEA;4nOUpU zO~{-;o}oE|CXoFAjPmkt<}R&KX$T9&jkQhsO*a$Fg59ug_S4Cr;JbvU!EG*BSevfg;9Y^* zNWLGOH;@knECDl0+BBY8m~|@DZ4%_Pip}MMRm4035IqqHpL@}OJ2OR{G?u>vGkO}9 zv(-tr`O;NI$Cum%i9%QYA2w>}447pgKCCOB*ARPFM9U4ToOdhP5HDn{f1@GX40e~Y zMpE~kbM9`h7@;2vLR43LOcvBCwFod}U8S-X3KG`8Rh~`_ z1Z~J>J=2)fWl_6JexdjYs6l@D{h5us1M1ST_U#?<)QgkIK&jEiu4Ld;FdHdytY!8U z_ds`g5A+&qc`3D-{u$`Cc)tyw8J~?9>MrsO_koC z#=!Z8>v1G5!&Yu!?A|wwywkLbhaotW#O)!wp(k3k!?f$s5X>@*$0hCX^YS^+i;%{? zP?p#iFkJ1Yih&_G2nJC`+p5}h-Tn)3joDyK^vI^%YwxMIq+2YqEm6r5m2|%fnP08W zC6WLD=6{R@nyNqfTmnKh<$=&LU3U){{+e+OXu+PrP=qIxVt`!m8K?sKmSH>R= zZBU(u*zDaKT_1D`SgWv@(A||W&&njcHj~qx6CDVKGwV;G&qFHKLv&CG-l@v@$A$XT z=mm2kQ#7C9@=3sN{KvCN$K)hc1q0~VUw@Ls49yreLv*VA-Z``37;pf8hP8kO*kCD7 zqWP0-wd?DS(?1yx0`jZ|g!}#Qt=QIw=J$bb^fu6Kc+Z$oh9M{!1z^~Mxjc;-&U=xq zKMf?mx2?Jd0bX|mPWeoeYO$QCvWnkziN#YZ>UJb_E+DfLWZVaGY6ks1ACR9IB7HfZ z(8tY)wAo$nSlpkNX%f96pMes!bk<_0E^;@v&sjyr2G5I*5;sLnT|UlOdEhFc03R({ zzNt`*E-adNlu1>fMA$t(iO@Fm`3FMFTVnx$gV&V5L-O4Fn2k4_ zRw?XFPRq0XUHgK8FzW7fUnl&jJnUfn9*?iXyV3R)5WUJ6!MT02{8z|h@9)TV=Fc{Y z1hy$qFR5E^vQ_4T-kK`BqCTuXBPtq#y~0JXSGfFN>=iCDdxaNHdxgsk<$6bB`joa| zEzrG?436um0Lg&r^ckp5pMvW2ML5}dj=U{!JN0IyK(|jaR`>^CmX*hQSv3Yc;04T4 z<$uUX7EJB`l*zUh*KH9@Q8V9%Sz9b5oeEmeYO_pp_hH={kWKTCsdSxuXpO?f)VKlK z)hY46G^~>kYuR|@Y+8z3#D;i#&QrNomu&uWAqAim);Bsd?1%Z{JSZVMaSX{juF`p! z@2%Z@`6{&6!v`AdVTKlan%ViFXgH3j8<7YWq;N>+gC1DRhDf(B)^YqlbwDl~E!_(@ z$Mk>qKqjNfBLK-{<|5f(4?|U8NFm(=D>s#+Lj56q)|wd~Qd`zs*ScVfVOVj>bNxm_ z5C7|Y*w8i8Hi7E$Nqhr143c26%$#q@$(bpBa7Jv&duPOSWs8rg3e@tcGE?QLGA&r5 z*#EM@usUm*#~Pa})n5d*Lvls7zmS#ai_7`S!=Q!VxRV&i%OMz2QppBwbEdpTrH;5C zZT?OhrRM!$Gb@#TXFKrkycV?bbS&j=R4V4%+THaxMiXeC@=g1+fVZt77l6|rj!%{^ zgdI|bF>eqiBkI^0o`YByMt7C#;L|wRVZ*X2*kqgJ(&|yFc9gC zEg2xBWRSs!1FQ9FiVJ9%!GZ67HE549xvdN;Sjr@}C-iW#URU;3T6-c(Yvl+wmX=rxpk*-uN*`bY z<^nVkz#{_8qPw==ak0vF2*?YV4|y@l6k4%B?^9`=aG3I7py0{`vso3NfSH2R(g+ZT zVtP_yxjmuc7@Sq%2gO$5L*pR}!Q>WIH?l^d60LhkRZzgM|M;A>>`+ugWE4 zZiiFL-4|KyM-=mqT$ zzr>)Dj=&%4MH@=v?;c<}^+}9J)lSsw9$dns)(77y%FM`JE#_wBVN5&Zf;Avl*s6n`ehM-kO*np`+Ldx>BVb>?(j! zJ_w9*rxW-OCGEnFZH)0I5oTX}5e!J3uS?glJEF8-Rf zE#v->jcw^_x-1``VEDqo;)@`1Id8vGzk9U(EzmP4MwY`yO&}Y`$6O*T9H{PvFY#LY zj11eAGWtX|^Xq0i?c`5&73KBmx=hSWo!*?pkCad1e^zCz)+G$nE|tb=x>vAIz-a|( z3fQy4+GT#DsqV-d!rh;h?7+u#?>1O)VnyT!y zRItB+_sLKMSR)nlkhurHs|%Q4K+Z<(U~(D&ntEjvvvz{z8yF+TgO&ILFh)Ei`GC<} zlwAeKg#52H5OuR9p&+@7cI<|K1HT!J;bzZQx+A?vQ*mSnA2Zn|J_kv=k0r z*v(W0N0-u-cBB1?-kO%Q4a5}CLWAP9m*YETVhX0W_HcD>ULbMsKj~>TyBSP4X*Gvg zrKJU6oA74Y{`F?rIxP}l+5XCw?XSFcrEF>nYjuy3wxxgRJ*D}o^z@VzLo+6oEdxub zUh3azUK5(HqP-ZWw9K0{4EEKOuf#OPCjF#HTHh{^Up!wN;QV}o7`)-sn0O|q^L(zI(lrxq{2f{Cha_Czv=lK2ZuJ4bg$j6&sz$cjcEs-laXkg zt9D!1GRWk(!DKG`4SxHQ4WOaZW`4)Gn>8{8-Ab+B0Rf!`{LNNSrnytIOJky|2aoPI z$ozu%ADQt#UEC3mQ?I@UvXx&9p50Z|P*zRM?IoWiD^|||Tiet9@T%LYm(6f{^~&oi z?Tm~^wMs7ypbNn?iAIgYU{e<_{a!%i_jKWaOYq_>{e2XeF3p#s3dolkPkfn)&v!~X z`-#3UoqC0aT#-Ul7U_(BHhx5lz35?3jwHiu(W;Y^ojxX|pdI{3wA2f*tH$ zsu}hhupDrTsO}(4r!*e`LI<;SrKXH$c5UTWP5UxiS-QHS3s|u($oPd0IeLM@@pm|v z&}iQkYEshc_AI?5N-Fr*KoTj0R0IzKD)Ji&X@-;Or=h3dcs>yDXj@a}UGQsWFW zHYOG{Gw-;t_ zH?GRhNLyywzWUIT1G$?1iF}sDl96PzBxR&oOsnUvjGtzZKH*pAEsBeuXPIfzW@Olf z4CDI;-9Qk>H+r5$CYHuPO=*@$( z$SdI}@hLbqd=(s_{f%CM3p6#Hgw}JPa71=*m&0uU2VfV#@z*st$%_>=WT!T+infaW ziXjSr#bU*3#YV*!iXRmfN|myjvW8Np9I6ab#w#}~e^x$LK3A42D_nRNPuWq|43`9# z1uhnsBQ7UgF1XlSs7r;afvTCRo5}*NYc8m6tL~}3SN#ng{93I9S2eZNb=3{kJ=K%I zSxu-qPQ6f_s$MF)tGTZJLH)D(iTb(vg}Pi_!7F(UUmcv*)ZqWXCl_ z`4RkBej-1G59K5IY(9@)&adG&@LTwud=X#Fp8^Lqm-%b_ZT=p(u=xcX*!;yy8l+Ka zs)75OPc&w5VAEXFTGL+BS<_R~U-Oy9PZOvK)`WozoB80tCQGwIvqrN~vqe*+Ii@+O zIjgy%`C9X>=Dy|^J)525B)!x8{46s+A10fhk4wjF{t9jcj(G@evFyM=fZ2VN>S1N| zj=^(>0a=-QHh}c@CPyWG<>VGTz%hfm1r}~M!omkY!hh0!_Q7v8pKzc|XwQv7$i~ll?=#8zdAet z=*nh9u#SWC`BJ-~WD8Y;M<4KaBIv>KM+2O&1qTMjZrsCM6ztisaqs?(uwx|bCx820 zl~4o!-V!!x^{lc-_7q&WVkqOO(*Fq@-H@7jJI~YHno8)C zwYC>Hicxn1CkEr~3CxT&FU#;0JlbpliP}#sjdRSd^k~!c5C(rXQ;5SC5ZZ2l&^m#y znMCUfu0oh!jiFdrjhzR58sM?uR>FB|yC?hjT z)CO6w)d(&u1lEP%1}7;oGt**XYL<;Sed(%*!6mqi`1BZSbIP~Rd;IGV^2Pp?x+9mes%@uZqY@u`gEVZJDGaHpK#d2EN34sO=bP!RRIsoL!55F@U8=J3l>KH|b8`*g z07-(caNKiIvO)MEqYTW4>3}lsu8k?T9+r^UI^AaEBH*2PjU@}?+O1CK?xlAfbR}w{QZ^% z6+j4l3PRws{~`o#XF}jUrx3W1v?`PkZB0Am(+-09t3 zQ-l7lTFKKI^v+pqNlr>NHIVkGdeJ@Vs@l>LUJEAAEqh=<&7Vyo75(FgERwCu$$4KS zOH2WgEKwH8Hi1aS*1z+-7pTIaKicDp{xE6!zNfmVS{Rk8ivs*NQ{#(_RJ2jA!PLb> zPgVLr67*dI`4!Y#pPZHsN5eWuZGdY_OE<_<1KgCjbXUV1$relCz$r|T+v|9Fs+@$W z0&Yt_r!Cd;$z-7s(av7DU{1pP{1p&ARUD~iOm#^9@COg9ch;^?-W0Riv~hLrruBxk zmOI|w3x|imRLc=hIz7(h=dT3f6+?5DODzl|X9SNC&P)YjFp>!6vNZM~b%8yR+BFse3K4QS(%w@ zPcYI=N+Ug`0kA|3X_;v^qyeI^1CC248vC|bD0!O%7%qjd4Cex=(5tM%VQ`xz=!0Xx z7mhF=Zx+_?jNWP#;&BuaU<1*vC+9K_gWH)%QY6Uwc%bdz<7Ir|q&usZXJ#%Hm@_e} zHBU%L1XwYV!HU9d<}yvNT8!W*$^QKSmJtQ-GPTb<5=^&w@G|8EBvryEd;bl+;1e(C z=PXK^BSxv^6YE2Ps-)(Kh3Zv{7tJxH@Ph9I@La>r$O$6|_{(zq3gnLuj)@UYW9F6! zYJUxzE|U0>CLs;qgcB)=0-$~~g^KNk3m7XW%ub&&d!#{_D>Zyf%WU-JV@~J}T>*ZRU^lVF zgYzHxym>DoJl}ME)AL%TS590J_+@Nnl@lT3Ii2tv&PCS}fa*>02f7U&a%Kuv@wfm7 z>`y8MaH9)<^|=vmeDrpLXQ#hj4tz~_s=QZ#3zvSC_e$_14gVVhIi(B4NvOP6fs2>S z%6m0e2Z*TDO`mG{-abM>RjdkiK0Q+Zz<)dBy>&a^d9CvFh)j_pzn z@`~kBEAKfZa*oP-1=1=EmG??CM&Vw0?}F+p7FOP?;Qtk{w(?#L?~hd8^Juc-R^`10 z)mM5~-d96j%3+oF7{w~9@~MtmDF3c}UjxOuxK`eOgg$avT6zC5s_wG+t#?cJ!2d7b zmcxRAWgnZJ+5i2a^ZP!CJ2StTo&AQj^=Rwq<=M)!oma<>RsJw5eQ}NeKb_$H z)BM&?=Nk{kAH@7Wd+mJRiKp+hfdAFp`3F}~U2%NhuTAp!5r`oq{PIa-ih&?t03k4~ zHUh;~Ap%9fR;-LVAXwB!{iiejjP{?7MWxgh1{J{{9Y*;z5pl#7eFB#%{#Zv4d9*&K zvw!3{?at_Pc>SEayYIb(Bm_F0c6Yw-Zg$T-_uO;NJ@@W?FZbTHT2{EdB{7%vPw%|@ z4sI;JdHMO*zO}V=eCIO8|8mXk=g*II%-67X_`NLObQ^0w-O7?h30|aFYo2tHUJHFH zS2sbCV6EMn3#warvW9adE2k$|18Eg!qKMa>`Y*|`g1f)w^JXZoCS3(5 zDeDSWAx*Gyx;(j!^^!4B?#rq13hFDh zT*M?UZ_9o^yfJJIZ1!YTKdAfr%zd6 z4BkZF{-ufPSw^U2nU?8bXjAAfAuIG{*a%mIM}+IcbHb~`>sY`1Z(%nQjSPz*bie%Vyj}0u^#U$u|u(sV_%tJK0h}5$5xr6 z%rWK^bB@`^XBDW) zWsG6$i!z++Qhj#_ql>Cs))<;g@zmjIMn4?^g$YHb=!we{$B-vcpPQSf4|A2~S(dVg zuopuOSHs|0;+GQBrPPo&C|~%L8RfZlV=$1CD)D_!7MuKOO3Ucd%6RG+mCz62jz%f0V%Zm0}E6&eL)6sinV zqDM#TF~Tk!(mKn1t%{Dl=P6?;WwpU6qhE& z+3;zntSmMOB%jS+*TQcB>HFX)sL0zyYf8&sj{G+Ar;tAdwM|(ff5zu|l-xGC?Yt)A zIi)2}vy+Oa3tMYmYA_of^T>N0SitpCsZs6?WOLw?f=`OtRr(fj(1*jgH{cTJVK#T? zk@Gq&ztlJ7b8z6`Xb$C+=}?~N+(C0GzX_|wV%PT1;#nhe>$hj1ow2@mpCCn6g4NGjsby+FOakX6Hs{u!cSkRO^u3L@x zxkwer>QcYcnlhugNFJ{>Mah%$Tbd`S$sMtxr!8rNZQ9$i)Jk#%Pee96SnS6Wi7Jxs zdfKbB*`;{0vl8EP6n3_;vyG*c_SB=K(4vd!pb2=i1>fkL$E%r0 zQr5+Xgf55(3VnzMU34-EjwSTA7qH(@h#gGo*_o(;U4<$bmChu(HnV5YMeG@LHP5bL zN1!o!M07cOnmmGBkFx6N5BTchap=}DlDLYmFg7xV+sx9b^VkPy54#ApvqUQU@v!je zt*qI9%D9g;`~S|Os%g&OvUdN!c*|r_Vt9PR&M&{`z40`A`XG$4p50%<#vj-lrIa0l z;-QhoMs`S<0^d-12NpK)iW%%#)D|8Vel~nM`jt7QWKYRIN*hb|u(JITn3rQD&#XMg|dIMcphwn-wWVH@Dg|#yb8Y^q&vYbup8_F?cg=?>;7}8k~{~&VQ>U|z`c)1KLMYD&%kl&b^@FPr$7ffI8AIb zKo~@UNe@>F`g1)H3<87syMmNH6dO1pdRpw@goctzTe{fN!Io((l10llTDH-$jh1b+Y@=lxJ3DAOiaFM`80#{40pVR^e;C3eGVy|;)K_yVuGOj=)2HK#$%D^v;NnB3>Q;9z_ zv?n@vVhT@mj34uSF4yz1Tnp(!Qd)xc#v91vd14X?lSr6E!Xy$VkuYgI%JX&L3GgI% z3akekz(&g14F6}qv*0ZSWB`z`WV zq;HcRAbp4QUCK>D{~qZ<(nF+&Nfqf4(vP6|1bhlU1IM_3oco`Xo*?~#^dxDD^b~0a z`uiIFoW_$35C%~Y!x|=SAARG+DZDs?7iaL|3|{Q&D8hJGN0K3=5>1AZN<^tKVt8>3 zFOK!-#bfdC2IwyZ6Tu|n%4MWPBfL4r*Tc1VZ#|MVkWQs%DOlCTs$x+Gi@I3T#hMvy zP0x~PESbiVX)Kw>l4&fNK8v+ntd+%DS*(@CT3M{+c4L*aZ654~{FgOA} zBL64gQ}7u$296`|=cFe{zaTwHnj$?#+JSthsl5ThAPV|}fnX4*KIk!Dlac9qa=^q?RZx5n7`2yT~9B`aM#K z(uYVTQY%u4)@N!yb%~-bQPkBvYy}b2(S33=afUvb zu|=G9+T*O}9%p^`IO~(gnU9VeZ-KYLJG3d@#E8ufvDwl6_GEaJ!by5}iTG!hE4{f; zNLc|zF%KJQ97aOY9vd{D3?7r!ZEzXBbwBsJZEsj(8+2XU)f?n_6YM9S1rC5DbO*s< za0GODd8_JDTKoixX}e*&BYr$7g~ zG>K28pmPsJ>q3qZNR!c)^5Rlfx142IM67mZ{o~X>enuU;luAh%?Onr3M*61RFt5gRM=cWrJzz!DMp;NeBzC?ct^MPX2vM9=tbsme=eAhwOdFR@_Z5LV(PFA z-rm?OgIyJNRm4$6996_oMI2Q`0jHNJU=al@dP9re(4sfA=nXCWAc-Cn@l_FD74cOO zUu}9rg;f+*QCLM`6@^t4ksw1P$PfuKM1l;Fz-7$l;xmf)YvDJFh+yG6il|@_6&!ph zNmOv~qa;zm!IzRm1qXjhqH9GwR>WgPJXXYGhp3>4#}1ZO#A63*E8?+(#TBubeF;Dq zM1dC}lpi5fr!idx8m|OZpc*8w(P&T$>cALK4~oZajg%3gN2{b)stk=KUE%JcIXF>EG_>-UHx4@DO+yJOcg*&C}pd z;Ll(q^g+M0pXU}hKrdXAvuJ}BZO{r`NCdwKd=FddzQSd+1j%f zYwwb=v3*{V0KaBTa4sGuZ*VpqX5(Qt9%kcVHXddZ4Q!%;O*F8H26itVCs9B=PNIN# zoJ0ZfIEez?d0g*NpaY$CeXH{#f$e*o?T>|Re|%v3;{!W16nl#Yc7CI?i3~Q8!6q`; zL(SvA19GR(86VIn8fn2U%td zMi^mJW-X19iZYvhlxqw|_Bq;-KJ8pO$NLuj+F1{w3Fw0KteGG{*BX7H^=R-}-ks&T zZ;};rrjPB@!PteE-Y3#>DB-H5%192;USD!b9i;YsKh8r}eXmEn?{avQX#aR_JGDRq zMx0qigLsA3a!Q{rp5t99yr`2#bj`J{`dX&gq8DAoiuvTS1-~eGqPCBCPLIB$oijyZ}vv8cTk-R)I69T^G~qN{?w3irJ$?TP2q1|{Fw zYuu?Ek=&EMGPqxCx8PnOJ%{K+rp~;2uB*=e2Gv;?QWBv`lQjr<+Ry|{WkDf8VSI?N= z$G;8?H-5vv4vaK@r{~StM9e4&-N;+`e{%4>sZ7rEO944X8pHYSKo0Ns1{H80tmo$C zUO#kJd`OHK1mt^%8r~S?sMeolyv@l`$+vGq^*0jomszl-{MpAtzRx(@A!7>f3@C?i z5y_u&9raJ|XLT|BA~>ZM{0u>#L4LNTqYl9-+pCFp$!S6&klK5QlfM{MJdyH4a4g0! zv{Vd!+XvN|$4G7sN0Zgs7Ge+2CPFE{v@0NjTmm^N&~||S=)D+&vBF?z1hU~mwf;2L%eu`?>FaDme|wtR!=ih!{8A6$We{O0zWG4(qabiT>N?v+NluY{BeQr zua#IcL_6`0@OkMZ$em}dFZ$7@g0oPI0*yrDz)L+}3%t;?`2g%3oKg#Z>8Q^F2dP7F zN-VAN&oCrm${vtMg#5)29$s%CZM=Xov{VeC>+UF6;moIjPkSl9HK3M3oR_}GLp6FY ehKUt|)>lG3x`SAEXdZ)ge#s{>F3x>Fg8duj>OCa@ diff --git a/Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Regular.otf b/Modules/build/Release-iphoneos/Modules_Style.bundle/KelptA3-Regular.otf deleted file mode 100644 index e26c46250c48a123807f810735a4f63cdd24ae1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36300 zcmb5W2VB(1`#+xSvdJ>h^<-TOI0+!w3-(^HSF9*@5K&Q@G`nJ=1V95V*zGgdZ-*C(v(Yzv0OYOgzonsH=U zT9je-Uih=y#44TsV6@ujki-1o{9_e0by-pV@y*AU+WOipg3MsSGoOVd0mtVYApYM#tziCo~CgonTGbVra+zpq|f9ML|QlF^>H| zWq1s6bY#vjj*3R}<|D^U)?Q%>92w?YdY^r(nGOkDYTD9k_&W;6Za7Mr-t1_mw`LWj z&meV&!;9&y<{Kc79#L>Cg}kdw3w8mdmmu8(dH0yM>|(}+&4yzq)092WG=Ti3>>Z{% zn+oY;rX8F&XWqgyW+*=k4tQQo@4|b=!}*Vl$QD9+7V3HcX$l;R;3$OahZXJE%+zOZ zLEc<=#v4*v7k&4ciu63ByP!-e)b*I@MC*jU6WJG#ca^EdCO~`ZK^fX+n!@+0-|-I8 zZA=sPIHa4P%yD>j9i;W)nx5xd-_MkO{Ef|n^ZzmKnq0UC`D!`(94*%a(j=(IiE)Q} z?$95#G=1Uyd*I!B;g|yVpbynPrG1$S=d}N6-@k|BG8`Y^+gvNkK!35*nBH0z(xGrb zU$L95&!~B{4_m_lW5V{b9<-0yi%`cDC`Zp*!O;^AT8{R0M8z@5dad?5?fbtSnsmsc zV?oE^s{`8FgtiwBTj-Dfu}`7gr*WWT@%6C-o~74xEWSSISkN)M0)0gL{a+4EH00B< zpyTk>@sIak2U`0y4qug1pP~Ij^XOQ7ebBL>V@6Z@-Squmr`zG0emi~tf2Ba9njY|7 z^!pD$O8bbu>%US;$CO6?D+L-?zvDI3ca#yKZ{JuC+Ry4?fRr9q`T<^G-hQ;G`~Wmb z>5}pVyPDS4ziE?;^!{Hd z$E=b) zI8xyl2;P23*goIQBrE1bIP_E`|f@ zWiLPq_i6nsl@UOLni)`r@?kt2v<;LlKh;qHb%P9G36!f2M>Jg1IYT|z=M2ml@K+mh z;0&%g;2H)bcp2o_!2G~5JfjEtKrowDVk!fLRAIhhsxo$rk*UU*nCeUorY6ju_KXA6 zf`PImc-o0^hIzz=ab@Z<^?;HZFb$bTOk?2frc5)&4PB)f9VfrwAnSM-vW&ksg8N_%ngJB9A$_!(MGb0#JW+XF; z@nS|ZW0V~#K1<{b6T-}3M=+7hbao;W z$E;z;F=4DX>%&ZCX0apL(X1ESjUCSfF!NbYCWkr3EM|O}Aa*R>y?m zvxJFeR z2IE+bS;!jU4b9~1#x7(tG!B|enqqCP_Kc(8Sk2MiQFL^6tn29J*uk-<<1VM_ zPR>qsoi)y!a}{ShXM1PSxsh{UXK!ae*DJ1tiss`-sNIptVym-F*;cGO+aFp!8)~ho zxv05UQLE9hrekeKN43`W|ERUkwwoKrhG+t z)Q@ef=M3{>y&pyRtz5RftaDk5vSy_tN{5#AgXzw_v`cA=(&{D9zK5$Gu7vVz#WNm| z4g>mNU}PC4hzW=BwEoRy=7YAlOuexFR@_jNPo?NZkeU+!zpt3r%p2fbg|RT@Fl&Eg z8J1-=td_N5bu0(H-I#3xebbC}gMM!bebkz517p?BI#Mu7onbU69RLl$SW{}~2fa9e z9jH>lXm$*xFqIk@8x5`en*n|SA>r;Vn+)@t8WG?VO7q<0^^ClMl{Z#m;kMd5W2>T z5-pJX5+LyuAh0z|7BJ0jV2)Ev0rNd`hk3+2hR>Fn|G`HZ*qW@w)`gGj1jOG{C4f;t z?tW|l8_6zalh|+BHSBhF7rUQ5%AR2_vW4tT_8wcxK4o9A@7OW}s%6X1r#aCPXt^vq%%8Nz!C!R%q5}vNYQ@yEO+j$24a&7c^HicQsEm zFE#HpvgUtUz1B`!OY5kur){cjt!=CAsO_rlrR}fv)Q-{mXs2suYUgMdYm>B@+Vw!1 z`?N>2`Pz$G*`}3EPn&^FgCYU~f`WqreL`pW2Tcw23y%m5iU{&|b8~mICOzE)eSAZM zL3dXZ_er6Ck$yhvuY2&+;2^&lKGvj%k8eb{pRfAc!`DC5HzIIKfZuH2FQ+{w2Z#Ik z`uYWh`+h#_;p+pH`>MY^)!)e#=b^zq;gjLbKHosh`j2r#ElW!kV<~`{luDUrzf@@(G;=N563YfXROT z>Tf@56aB48KWlURtx3PnwfFy0$@DL$>dRWTu_kS2z*zVN1^5I__V*pA_Gy6nYrWmw zn)Dc`eq(_8>!IEc`ckS@YqeCXHXiEzAoaIb&{V&mse`Qz47MhNr$q!!^$Cp#4Dg8v z5B~aMm|9!tmpWTp+t<47FtxT&^>?^>KTQ1{{^f(hzMKyC^_%P;5a1J5k*W=AW9{EI zEk~%egsZxo!-*DeTe^idps;Ml^gd0WRxbN*h;(LEr*Q7sqd80r`17aHj|x#{2E_UW3rPNl03R3-x` zN!39ul0X%z4{FS4P){Z?(?Q`l2#Ur9Mh4m03k3ZvHjh2Uo@L9}C+sg87UW?ym_i*v z4$cATN9EoI%@$3zW~XMK=B%bbb6xX7V+MKm4M@4}+TPkB+DY0y+S@i78^OkCQ`e@E zO*5O8HXUuc+IZN^w~4aZV6(+$hs_?FA8bl(ezJLG^FN)fuClJGuDY(7u8ppPu8Xdx zZip^Tw^DaicSrY7SE~C-_d@qZ_fGeb({el~aF}!AT)9@94>yeq;^uM-xkN6F%jDK_ z8@U3mkh{VCz&+&3xM$p3-pDuP-S}3#CqIFo#82gC@S%JRpTV!HYLU`cVBW{d|3t zK2D#mU#s7!-=g2C->*NSKcPRXFVO#>f299O|BL<)z1fzvtz=unwzjR4Z9`i(+qSly zZF|@bwjFId$##nEblV`?d5%aDTyc!h2z`%*^m<6(oUu>`dvF5phy~sW3DM~>X~IUV zu#)m%1!_U69z!B|z!P@(&q`IX+|I@m3Bg&B+1Z=2va=&L1qVk)1d9UK1PjinHx@b| zsocFD7RZ)htTOVo1Jp;6Br{y1GokR+GIqSyf4k&wwLQyf}N7~m!;8+o_9 z0grQzr61TNHsHPI1dN_MbHl!6q9HmaT4;|Yfw;P0#g)t_16{CS8Wu9uLyF=(wog5O zVf)?!aRpxxvUjMcINK~(vV5hqhhLeweD#{l#f!vg{Gug`=ZnHZ%ufso8aqBX=ZHuS z^GC9CjvmhmnkdfaUCIbOBU0k(_+Mns2w&;Km(D`AMfvma_;Nu;1MmM)(%j-E+WCS zYvW_%m&Mq32*4x(db}4$2Fh-_IsndC83+&h`7D1brSlJuW}gx-D6ZVN z$>CE)p@2&hOqBf6`e7j^Jz6k1BOx`QBNno=HUXhU1P4b%0-HXR(2U0z7aP;&=vm9nkUzr{4fqhfg4t(zb-*~Va+CfSZHY)*%T%2b)E!MlT}hPz$Wp)y zX+hAmkd9cczZQ$acvJcXEEa_08BKN3@v-Sx_$jfJEGQ=7rEGBt8Bn4nDdtforFl!F zoSYPa4=NWqXGEHFr0Th!2`iCHr_gIlhN+L=gu!APvY@~Pdyw!l?$UST`bh?}U;^?< zPnHglDmrxxJy)S#+fk7&7$uytVl^&EnUSYa9$r2AGIhp%3;yMluc4{)}~7c1jrgB zfV8kA@xn~xD~v}<8!|gU;q83_rcWFd>$05~ZaiaB1nl_yS)S2{FLNEm66<5AL7f@9p70KT{Is zE?GQp!J^F7sj(?>;wUZ_{`@nCmzAa8*{~^QYuGwz%eu6!o9s74-)Ylk$#DPJ)Yw$< zG?$W^lDaxGa}B(JN(o6YB?pFXnc=W#N$jFnDLOtbdPyA0PtDCcoV#`APKTA5sVh^Z z^yHNEOozO1>=_$4!P`N2yaBaZ$L-3zenF59q+-Dl&llLD5}`hp3ff~~B}mQac#xcZ zmD#IERr~DKIcJ1fXs2LWgN0NdB+%|m0x|!&JB7q_kp7uixa)#da#yN!jlg$>=;ZWe zX%6{ZMn*=u)Qb!(B7=14%QBXUm(j8%xR=s5AuirNJ}JIP=_?8uh{{S~-~N;%+Xb@R z>|qMSmfv7L0AdxI=QbwwNy`$H3?0mYMF!tGz1wER_ zcbN;ll_H+9_EyG1Q95`+lD3Y~=m z*wTk@jD?-V@Ga>iB_{4ow?D9;u|~T$VisRWphVe#!~qF;aqgg(&#uzh$$s) z?-8$3AuS6F=Ii6&lQv@kq)I<%7O>f0I0GcPa3Eq_dXRPM6I9X^=Hu1N6XRFGJZjt* zqEyi}#_;AO$r!R72vh)h6psgh6q}PUY2JAIaamJ}gz^Evm_m#QpB@7Q5Q+uK7k;YK zsadFpgkcI*s84-QZ;WjPOZ*Q#PLzg-d;a z`hY9luzZ8Bg9VUU_3k0z0XEKtJhQt%nO!o(l*)Zeh1fJ8jeIUOEj3jVxx;yuCU|;5*8?Rie=pcnda#FgP?ay0u2KwOmX=zgDoP5wZiMIMO$Cn6iej5)C`&CtxMwqZND;i{ z@zwx_Mgf^DhMB?u(golg;C7%XGbkta0j|LuXPMIs zV15AG0m{alXPA5q=;wf~0ni5CD5ijAt})CNh5`nKkP?_DbWC00>~rt6T>Dp2I!8>LjdM684P<)0DuJ$7WR7q+-XcP z!#=FaTx8hSTJU=@PZ&TR+26FxLI#i+W-&{lsaS?tL~%{_4-FH{0JsS_DS)#~1jG0< z%q)h2Ss^TdT7Vn^SP4)L;492(hW%gzAP)Oc&jhj>J^25qg<=E1E&@QeHh{2cY<+;9 z9f2po%T06Q6`9RZfba_v2vZZ=D8e$w^U&CosL26En97`K>P$z^k|`DoDU z@A6OelD?6CfPRdAu|5^F^B?rT*fzH9VB6PrzHPqk727|N24UoZHlX|H8G0{N73v8+ zg&D$9VYP5jkSiG~wXM{nl4qsKm4YfQtF*n+o=R6MJ63L3*{$;E%88YCR=!pFPeWBh zH$#HqyrIbOpi0{+eX4A&a;(b9DtEqV_RX}a{j098df0BDowwayV*_Jn<7neJW1jJn z@j*4)YIUl0spe5_ezl#|j#ax+t*qMbCf?N0G|IHpbldc2^%~VXR3BM=cJ=ku%WBlD z(V#}V8Ut(i)|g#mZjH1W*)?)&oT*Vz<3^2NYF4V*w5DIpeKm_}{#MJbR_9tCwNh#o z)GDs^&YrjLW}j>S&>_HKjl*7ta}IZFi?y5A?pAwb?ZDdiYg;hFHLxr0hyC$#{F`VL zTZ^N_b>bnhMEoF0l7}=&N|#XLFrPb>6vDc9C4#xJ+@G=W@(NaW%L$aP96o#x>YA$#t{q z9@h)5FX}d^+p4Z_-8psV)y=4zTlf3Azt^*`*Q1_Sz0i6I^;Xr}S?@xTkA-AHQGqEXjIQyXn-bga>DjU5{g zY8=pbedC>t3mcOrj!il>nbu@}lTA%-H??W%)U-|0eog(FE@+zGbW_v(rXQQRHS5=G zPP5o%hnp2NyW8xAo8ac;*2=Aoo2Q$X+f=u?ZcE%!+}67tbGzpDlN)L7(7a*uUd=wfLcB&6Y!3hP2$%@?^_DTlu!iYIV7Ft=5fOcWa%{I=S_|Hhi0- zq_e@|Y*73SN`xWt^$cV=TMv8LIO49|(MUO)^knbfIkp~=>ZEBO{H@Z|8?-+I*^o#A z+82{8#dbwqtJd6)L+66c|8(e-JMPVL0RaVG{9VF*`1 zw&<>dl`vKL!vy8&C2`~oPZR^0Ff`I!iTK+Um2@uIQ<_)Wv)C9Yw2ncliA{lZY9-lb_sK|^v!VwktCg!gpi3r%m-G3HJ-@D;X#Hce^2XQ?zDAklYAN*5M5&6}mIIUJj?owPuRiQ6%!$Cxv zLne{h_N4ZDGBJlpq7w#?@vTiS1Ja&l9Hw#B(}v71QHmGcjo0If}Gi znW)sZS8C5uCIu;y*chi$>th#jT}?(3s9}LTnqKYNDK;fuyzW1~k1jqgF+SctHaR{uUOXD6OGr*iOm;{~O-@OY zcHh|DTNjs<3f~L4Ny*aDExOd?o;32$-E4muMf6?VxwvY&so1zc~!`d_Dj*^I*M-jOSys~IDM_fq8YclN@Y`mv5U!qiM8ifg)yD|UxuF%1f@ww7kSjsbvZRzf`ZFS@NGH?a=|N*X{WlWU5j9<7WXK0~ZQ>*H{w7PZ z!CuWae`8YKD~GPw-r;a1cVZpqfQbVoxtv6VF{C_NCfePyAEFhC4Y0lvUu+^sMtu#KHm6V z!Ka(O!ZK%5m^-0igTV3q2L|N5D&BGVieyN-kB^cf?c<{$>-NBx%I|eaK!C~iH$fRy zjsx%!&KW>?CJReRRH@y$lHMhxC;Y&dMw@+1ieXF_rSi1IW*4VQ#&;f(i<(ZbSE^ld z2MDI>r5{MOyhYDFvP9#ni+dBF?Xf47$J|p4qVXNTX@h+>zj}6P)1^y?BAPYy2?r8* zC7-f6`CVA!wtmw`kM`SD`r^ASC#`)jkamOJiISes3(yC%=!=bB&6L^-KGovSjpvgN z?voV6_n+=P7~U1`k?|HRygGNsJ|)$Tzalmgp`AeRsAquWSvZ^ifqAc9=N>J*vSUKS z_5p(iN(QB6%o`H?hAn!dEjrQyk()M=NNGT>yNG;SI@nPh}4S@l`56`n8O#D1zju17R2KVlO65+?oh8dizSV<9q_Rj@7rZbgVYb6~ zPGM)uIiX+-xT}Mm9`Ru@;<$(^(r}k+fDF(j9-hMxC&t1NGyO>6* zn!G|He0@T44vVA`e|US&p#$3^yhOu%#OBKFwWKeI#lOQ2m!IRJ64Ih%1PobLu}R@c z1mU^Y@Qs1wlBo@eD!YktEwxO>_v^7zmx2sH`-an01eK7HCEBxOcxQY!u~gnc%`%E9 zJt3njAR~E41z6O;l5F|}DxE!rDB@J!iPn=C2euZ-JaV-Gnh&ggx|qZjBho~!Y9euD zAh25|fRP7@>o8>4_UV;mrQCKhz6ZsRm9j-YBUv<$x`mXRN@sGD?}*4=(plMC53Dj^ z4ntNX;12KxFrzyn!^W6W_CN`#2RT(p&n4&vRB{_$cw6R8!1edHmj!>HBs?eQtk8;KVOR; zi7%~$nP0sJpn8M?VRi5zZVgrpmRA(-G{~<)&>#Ri#d7y(WFTpY1Y}60U9SAt=uOU; zM@3^}ma`?lx11kBq5Q|R*lR8=g8~#~^3XENP+fFVMkIdS9w$kUp?*h{AoaH7JJSaY z&wx4($W65*o}4ieq#RPm`3j6PCch9n@@gk?QjR*2qq{J%Q(h@p`NbPwX^%nb7r>)r z2z=ufGG{oBg&Flg@hg;1SaZz>n`!F!Y%W3gctx{Zt< z$mCnSuraa=G9DX+jB`iA`D&DxivVN+VMyv18)pMEdYEQlW1ez~zm8)RjcMZc{c-yo z9_L+sDv@LSQ*cTIjf?h;5J{7|fQRhCrzc>;hC7%&c?O>(eN2jNe&2WR&tChZC9bIX zG^$YqN<%P|&b0I}bwcI=b+OWf&%w$u-k7%wcwK#()RH|KB3HnC7CtAo0NSKrIcx_u z6d?9A(vrha`4H3;pTfoT(?*6PKv`^Fr&9Ux&=iQxL#%d&((r+KfSPR{y90zz`3RFQ z&irYgB)_kVEf15C;Swfu$e;d5aY-zBf{1_hhiKHoRR=}+8Wgz6PfKg~8r&RvKY>pT zib;c#YVG7|av#%)+#N@b>x+)t&!&*!Nwgj*RIaBAyQzw<^#fbV%axP$}j> zYb1B#zbXtAaR~+GTcSbGrQ$jQzNkTeFrZc8X!iWZH>rB{-;y> zZit5Xm>bCWh^&`;jt74J8r%lXj-|Ygf!BWk@t9a5H+s$%{)C{P#D$!D!VlRJxp0>s zftAV+Bd>^t!x)gUkV4YXWZajBj3EO6HUrw&*BXQF`Gnmn+iJ;HE6;QCjS8M`U|9kz z-#}hs<#^6=gL1q_BB|y`89oabe!KjXGJI>x*#7d^5Hz$UdSbcp2$yt2-;=WMl`^aU zpkxAmqSiVTBuRhE*w(bHVJ9%`R{0w(nL!dw@02KAbjl=5S=~rZ5G~2siCQZGtw{i| zx>m_ijLHdM^~ESfGVD@1JcdWBYHxP#i=NI5Fmsc;e8e<2&r(^5BZxQ|amHY2t-GC~4Wkq%em@(XNvu zWhU?8J#+d>EDrNUyAIFv0G?GXDIn_a`{4f#?~dSQF7#!y$V^kg;cdHGA@O`)Jl%U+ z0k|*tgVDb=3R{?vuAxKWX-zz?BV!gxBSQuuqxZLP-VDq+f0#SvKdkI@tq-P#yV>2!QNJmb z$+#hrW&`m9F>$WsY>9C`$xARjUw8On@>9JdHlCP`0ZhKW_sHdf-QN9^L?;ygv-iWM z>-7Wyt0TVAThMWE`=D z)RuT~|K%Jd%;_IVw;$PG9}<^`T9Ph1nq~&YM^2M`z#xl@ONw&xP;g^ zYVIY+iFp%r3unamPq&|*=D%u&IAH=9gYogPs&yDA<^<{Dld0{Ol9H5?A{{!ci`5w;A!YK)Gms*5UPL2+WfgzY0Pc6dnd~7nbDlQ=|PV({AWlal8p6Q^hu<;JcJt*b!2Xk@{AI^bs4CE&T z1$u+{X_OWDNAYDa_7=cQ(U_D`@SgiNQa7nX1b)S5&!46jns9leUZFQ2{-L))>~xA^yBuaX|c#v-{hd22FW zCjFGz9mzMU&qg#}IkjfmjAY3Py;|mRyuCvUkIBydnW1ZDNygigW`+9pRl1Pb`Ofw} zGiFT$DKc(W_Kq0I5qC~KKIC@?qCZ&paPN|>3pPl`qGQ|EAI-N{Hg7OdXV9slKri~t z;w8z+OU3c4C$BqYZ}5}fzp*QNiH&E9%&skvv1|}F$b8KG>rY6#Cx!Rfq6dGL6_*k| z5CKn5Gc`Lnvb1#nnW7XC;F^J4EWkCh=gbcaS-5_)RLpN)wSN1S_48-nK}B(s&$M-D zJIS+|Wblxs!poOV-?l6Ien4Ttb+AX;$=;@Ui&wANmXonc+Blh;J1cq~m@myqJyT3t zY?^qCOHEBp%S>CpJ?q<9i=<$%VbT}POOA3F9N;%%%=QV#zTKU;Wuuh5NEefw9Gm8F z5c~pZsS@eO-<^5557abZMnLa4$#9!0s-#p)oK~3VLSzLc`3pYX3;eN&XHxwx2i5rS1w9fiRB(d#Qz- zaOJ@jwy5A(ftEBik7|JpQNXHw0H7m@3SbB~9+8*-KsAhIJ(bmvOCn-WciFj+bT6_i zDjfFXmg~m6`*MQ=$oPCYHguOAN^!L^qZcTvzh@((JO>-SR$FFoVfAYCt<= zaF?4DvZUs9Eg35Z4M+dhF`q}WWR)oaDSfIZz%({5EAmkxS*t!v*2Cj9R&T;ev=TfV zksu`{j220x9rU))4yq?Ttle}fnfkQ~GVc3Vtt~9!#|38Y%M|<|tGQfjJ>VmdIb~H`({Yd1>xQ3 zjUA~0l0YUk7NJ47N9!+-=VGH}D3qY|O59X}UG|}03p}{qmogPDcd|0E_~+vD`7qGM zKqEQkQ8SUUu-x4nUjvxsENQJH&6L(OCc-)m&1sI6jYZj+$4Seftt?-k^i)NLcA`3`t90ML_?#%6rCBh8eZ|{2o8UV zN0%5a-H2`#-V8Xy+-_gT_enD?@BbRR#Tid@Q(Sp9eoJXaUYm^byY+*2b^8_@=X4u| zQbQhL<~8&5gTFV{fR7C1uFPB}u; z7CJ)H7C5d(Br)b*7aCnL;~c(?APB*@J4${fw=@x9WTE4z$@2nciaSDl*N$>9u8mUP z5{2*PY&v)>H?+Idmxs2jk7_u)m!eZ#zn^p?t2puEUdb33<+p85Q1 zbMOh;b|6lA6@{R@rMA+q7bY!a&U6S2&!am6e88a;rBne(+^_*;QF9s}VRy3Rhexq5 zRO`Fm{(*NuVUeTyf($wfGN^3jkt;9kTjFhaC&&%3(aCH&q#%RGHAG)B-RY1HSB|QA zhY&62Mh6t;h{tN)8+gmKm)O6=Xnws455ldLC12X4Hi#^IY3++TBl|0Ycpe-7Q1oZ| z{GNlv2{5M(L||Z;A+)2yTn{x*13^QxPO9c&=0%V;d`RNxare=c_ zYrY&^Rgw5#itP@T93nIN0DoPR8<`GH8J0B5!O^P)z&Eu|H6un+_4G3W4!8k)N@8k4 z3UtmmVyD~Wf=6;QZ>m@dAWqwQ>PEB&sq`Z^QR!{EvSU#Dh5-`>_76Pz`c-aTp=7W| zqU1b6R2_LmcAL=`NoOp4r+BCqJ#_Ifyq?sC4+HyNz4AW{pQT>74#Qrg7syVy0`>se zsRp2c_@v=~##iTdeyLJ@f_C|omv~Bv@tw8E3xIqoMCaUtq-HUx$r7hG;5GUdknWaB zdzdAXY_hW;7IqVaC`Lf2V&tZ5k=9j+%M?w8wA}oME+H)~G0oxk)87-lM56e65oagl zh}pz68HGFPqPRMvU;w4_*gb2+p+NEZMbpHfoFfv%svgP#^dkp|P&rIvSSN~xqaY}5 zVX{o6so|C=lQ9nvfY}uYKpr3f6(xpK0#lqV#s6Bu73%1r(%aN>?%zthflwO%m)Nhw z7)m&ECld`V5{=V82?og+N@IT|0;SljE(z~G2~V>WIr^7+V$o!zy#E`C#non zYLw^qMPEReRQaW8+SK?dArh%w7nk4Nh{ThYQKst{zJ1208bBA(f-X`WEGmm!%%Q;HXm7751%%#%s z1eJ#KsWhAm(h#&7wa%ZeX~D5Ge=zn4!XUVg;L+De4O#`6Y8D35I^tA;`Y%bQL|a#t z$gt(i*C^y^su~fIjMS3-RJl^BmwR-^g@~*)uY)Vb^2=XK`w%;p7FS%~Xvtuzdnq+7 zZ#v@*q&HbY20(llXwi)nJGk4z+zIY7miWKc@cDfM%=4RrU*B?4eV?0IfGb~%*Vm<~ zFJ*7(KH>_KJawn6@q(~s%aKnmmA#)`DjA<$DiEiux>Qux4Cx2(ZE~rd6=XeV1zFou zkk$PY$O?`&09i@A{DTPs!qf3`2r7nfIWa#R8@%v775;_Ti_^$B4ty(~rpT-TD3S&U z!^GOliqh_ad%#L^)-a&aI+l|F#8N<4)oZ~hEE!DZ)cAcX^^~=+tZYE%m0}QHzGRMH zNsZslHh>H?HzUD-IlAeM{d3lQt03 z36s5ePuXQs8j&j8=ULf6HF(AKs#S?^PRHHZ(o6j|>ukDwG!9pW!c?j%)D`6ILCv9H z%k*q)eAN{FGfcSv?L34i_T7!j#&tlc6aa@Rt^k7sUIV8~4YGg=hHc7yiVszUJ&VQ{ zYDnm@Ng)VAKwE-j-C?k2mLr{#^$4v`Ua}GpLlZ=$_!qFZdnjC z@x^~M5ft3w&2P3r(e`xkNLAnmYdb5PhGf(z{7^nS8Nf4hw z#FhH@$Y9zle<=O`)5&*A<>)4)zLrE#j?PgAgrgVW+k06`48`mN@DX}Jyt-c@7lD+{ zg?t3^i@@Jm_CVA?88{2eK;zx>9XJ~+E8ZsXA{t0%&Ttse&!wfn2A5SoNZw@{fNGTG zW+3=2En#U!f+ROry&viXAsX|p92|xwQC5kJz*!uaT90wbPoM0p73P_9ko@#9)N2Js;pQFIZfEeo25LA~ab!kBUu!?-8<#mX)sU8$E z9$$r}ANFS7x)3SS^19g@Alt9<<#%;)38}UN8OqS>uk1u~ffdWmilh*rszp)vsJY1@ zL_MTWk!qRuE+4-HfhqwmlwpU^qY~{cbyDt7{^Q?$C^wXbgg<9>r;b;oI_RC;`u~Sd z6?M*hora(TF!^SnN|yt@y!HuI~FsIN2xjSOm$H@|_dcnY54 z)v#4@g6`TYJ904Wl$U3|61JeEqI4tLxFy>)^vWA&KVC| zs3VCWdpGcKRu@5@@-wspVuCBmd7A!lA22PMSD!ZgNv%Mb45(u`2+U5V{C*o`RX>4w z7U2`XJ>x0&kdDfcR`^fr2Ua{VhJHJ#b{?L<@ci&mnE1&Lp_F+(aiymIL@JrSqo)3+ zDq-TGRl3uG2BWP^t@6P$>fNSI_-&~v-ajhLFGjz3SyEE8Z-N z$Hly899DH_jSq*^QhB&`&%nI;bxBQil21;vYf~$!-Aq|iXLL7 zsQUf35Ra|bu0he&iBrUJ?xzVa&g+ARmW@v7J)cT`V?SZo6!>n&d(<$G8@ z@(Pm|s&fKRAp?os3?54eA3uZT=bubKugUX*W{Np8{nn0l_@qHA`qO=WKl$C-+-+ju zw*B)?QA4i_w%9A(|68XfZsg3 zANA>v14?Kn8|X8s=qE}RX1o6^PhUp$5&E)KppW#mB&#nYuD~#nqro&(YW~;55H~>e zH*4s?V?=s`2G_LQjYbb#q0s|{5It~(Mi1Pi(E}OC_zqU-fiv>H?0J6&;Y*S61!+US z$oT59at>URFaGM9dIa-__95M#A+knQ>nfLzo`S9+l1kM&!Yi+)iSbXXo&-QIhxw zK;C5~roT95hisU(9iYhPbDOk7#$Q)l)FotQCT2QhbKt=>Bmwrlb1LdNs@C%sKBcu)=5@u>${*0@-@*ssPclv!Y`Ol=k1BnM z;Pr{1Pt(9Rxf%FL2BSuK9bU~9hx5i9s!ZRTf(!Y#YmYp7Wq%w2c72-Kd8N>>XVl1h zE?1Es_Q9>Or5EpZbim_eERNxgzXr`1kB!f%zH9&(6HMevZvsjJ-vDV=0?e}jFwYyg zmV!@_Ga$=e!TbfH!BjrW9h~ft@e3mLDBmkwIp4h^!e$@X1>~6G^~U&|)Q5V0ZBpJ% zE&j$Xk7OzRXnsviMH_d&|b|*cE0d`GPgPB)0b_ zrDo+03`@f-5E_z8r_5o7Ap5LfYr z)Ta;qDu;puoBmfZ5egD)dW8f_vd-Sr`=;`|3w$rt|*t2PZw<)6XXcdZ{u(UMW}&x5IAsp>rtd1-b9 z=h(ma109v|H|&b2U6w^mo+jfNN;+9na6WI?Bh#KEI5Ec`Yfz>0Cj4$HvVDXyPT$#-4fi3GtR3LZ%Tqp3? z;Mc#0xh5jw3K(gRduQ*FE~PBdsUe)iOZGKggf-klXYh;hhyc8E#0-eSrY8fre_N`3 z^%g{0pY4NsoV|6ArUp5jv@4Z`(xF z;pQ(liRq?s_I;31bTO+mj91sJo>yjbcLBz}$ftlWUOLaiLe@C2$H)j!fv9&LRtY@N zL3|l3%u9uZc`0;Z9y!XV#z3)tTwEMo7%=h>M5B4ag2t5iIEc%D>=<|hM7<+Y z=dt~qoX{Hn$flg*N3$tRN)~{9K_0Km;E01|yv{&b!>oITK^OSU8Xr_wc2~=X?r3{bvAmyp?!VKLwd7C0$>_qD zp`fU)ZHfBw@rke$Li|(N?5JeXg%Ggrp)Una) zLu@9t{0@Oyqe-wDsC7*_84b=z8ed67`GbxKF-Y!kx|p;BH3B~5?)?sDvI9qr3Jx4O*>m^tAXs!sjnlyoSkesMRcPiw5k1!z z!(!=q^Al$~G+5Gdie!24$*zze@ZT-ZKA0vh&qzps?Glp8DDa*Sf@vDWKSh9G@&b)v z8aSnL6w#(PoWf-eI4|cW68H8HN)7=J(Z+q`3|VP%2JhL1GKjJ98jEJP(ba8_O1Rmr zbpwERj3I*q@KIPVJGY}ZJ~aWZ*FDs|y$1mc-{bb&h97l?@I<+pHA;QzXb9g|BDW$n zt0E}9U<{5@Ok2@~#QVb{<(#|l+8ZG7kAI;QMx_)t<;XMTXhj4uVPH+dLG+9q)fx9G zEtFZN9%R-n_^-@@U>|?OdyrHMpRdThOM^R&c_{$T$zk(BOy{W!d?nJeyoU(_#9~B` zxpbjx#r6TGZ9e7Q{gh=OwN>>HqB6lO7*V3NMrM+zau1l0{v~!YG4W?IiU@JmI)GW7hz|Zi3RjRX{b^}wTEh7*-gsQP$=9E^ATGi_ za7$Fyx9N$gnPPgZ&XbQ@I4^O5!w~Pi=YGgveLPhv{#JK*bYfU!;L@d`V)PYm#g1($ zI~>+#CdRLncC0(R{9u~Ce-xh#PT*w@(aRF!qosB8*F;XUS8DO=GL}X}E{vWn84?p^ zA(40{a*9_X{~ok!;r+KOR#vJ+YOknNnS@o7olX0U%r&}RlZOrXs=zjTj<8LhySiJ~ za9A9=1eSxIVeY|xTo%@qZ2;SiHHYoRMza2F2D<|G-rB6EHb%Qrds6#S`&Ro0>?-q(O?4al zid|*e!dlP~HW4=SY*KBG+nly3uqo8l(qWymuCA`3uB~pNZiQ}*ZoMvBw^z4ccSLtg zcV2f>-BsqX?kT6^>^KQ_lBv%%gWY7>alTw6>?RY(C3ETADsBU}joZcT=Z`wczfQ3@5cA%2lIh^7(bg|$j9=j{I{^T%sNLTt7)aRUe=a z)6dq&=o4XondSOT`W*c({XYFc{W1M1*kR_f{uml43#jfl5!`P? z7*$wD6uyq0d>20gmM$K|fIbK_LbnAvcn41KjFp^G9+#PN5UoswZ5SMOZVijig`E}B zU}b+yOj>&UckrD@P+ClMlC-5)87|VLC($im=!eEc??drdU@HOGu%sJo$IuwTjv5eT z40}_UqLU$F{`=ebUm+cs03aA&Hx=al7E)P9CUAo87~T-SX=!q#K4M9$*D=ObI5hr|79y!#bY=_ zJ#0v8jD&vZTX^K(Y_r3;dHFFQx|hV=z(QXjj0eaAb_t0|PY^f8Y)eeECsnr)Q=&v1 z&5X_!N5j?)^)0;>8@V_5hDRa?SY|*PTZ(mk{TKVi#3Uw#i3S(+m1AFsPMQR51~Rky z?Ektv=BykW-#AX(V9Lt&cjlBm0p|Jc*d=it-F>CMq!jR8^F~gYE5a@+uqDoroA?rZi6?j9a7uob zJ-GzYN$QSBhH03tx=2ByoCKo@TbEE=pMv@#Y#3s>0efHY&d^UJf+|h%q6ar(mM#|d z%!sug!N;Y5x^#A^5Wy@9wDSPjd@IwPVrD6mTs02f`t?awE1e?h*JCm zFc0j#B7AY^Z91QLc)KK+=l>r}5Fp^xW$E!EnchOz2<7+1u!l_NB3%Yg;FnsJ`7q*e z5B9Zz?-x$PrWmly7B<gZG2IF`RIWy77b>>%{*h)(Q5r!AlV=4DR8At}G!nmF9}u5~cbSX&Its zpCdLjLN{Tr2wEZv|D}WgfcED*p`n3*_HV$f`IKrQx}zH8t0{=3WH=H) z%IW4pe~dsv89E8E-F2}Va$)N1%daMFOfm7WzEWzZwA3Xe#3$IRgP$T28+Q(Hq8RXA2>CL0$)Bewgi2HzTNQMDh#*vwKK)TQ>O^fc=( zNiosUqT&zICp}HN#Ao4j(Qp||#TCV5da0m`;lc#dyrs+Li8Hy_IEYvu3eq7iRoup{ z{dVa*DV7(0K6$EmEqun%NT|Il$Q96w2Xw=*$q(H<4L~7bKH3Lc)_@>CjO<`P7}ymk z%^@DPT{?@PXMkjYwm`7_zvj*bII8QsYYf2OXk^+Q>B|-C&f#N0x z@d(B^wPJhX4o+}wZ0wAtaft(R;v_b8VmGE?BJ;4Dbjr9GGvvWoERT)t>j%!{W?~>- zx3e?uoet}1uNtq1?e9DHT6)7m~}33n32bC-IV1^oH~oA zmHz%X;_eYAF&oY${{BbbsYp!!I~>tq12E(FPfHw+i!n(Y$*(#;P;>r&TFxiLIa)$| zq$Q5P1^+w#&HP?~ulPfWhvoN346IrCrh%!U#9RDkAYq<*E}oFp>hm=9@Q?9XmU?Q_ z%~yBF*8T0K8>S~FQ&Hjt{KcG0#CG%edu+$|ru)CaPJD{__|A6|(K+$Nn=4>4Et?ZR zP3&LduP4spn#PICQ$U>KbetWS%1X2Nk?BE-G?D+ao%Fu^wE4k=`7+LG&J8S;&(Odo ze8E)l-Sc$=ZK1?WT+RI91b${r*2hALym56R-~Ae{ZU&Bq5(dXqyeXR!;b;eb+{BY~ zyN+8-aDy}ZCV*#1PvD{#ArFBMhOI6PDThmOaM zb~B{ol|~)@lKnK}xxPlcUx&w$XRG-g9XE}nW$L(POt7xe@sP2}`nZmV@&EsA9gi4O z@Y(N|6Xp7G9gi8eS#Rrjg>eRqW8_BW8$G{lb3bIS?-(jvv+iF{i=Ab{c>_8eogPW_bx7U-`4%%MX+t#w$}1G zT5sL*l@DJY4$8OS6#M~v5dAd{jPAhiP7*(#x8m$P2_ePF`C?*UB1IA>+z*iUc3c*1 z=5s5l?%>WA&drcL$s66BoXL{1?ooe9j@!9g>RA`YKWAjyqO|?Xl(&*vC3X*TzDuW&n!EpBIIs;@PutMMX#Hq~VOwxI|EIuFESNe9`*4Ii z++lJtjtBoI4Xbn6U#>MK+{xHysUs|j@iH&>>x|H+H(r-Crgz=&xunsww(I&NBJl58 zIwYM+O?@h4|ANi8-wplLXOsGDR-g0Lr})U1vPb$9Cs~wD`ztHD8W$O6>~Ynmm(4!& zp!qA)#Z_;EHN(2rT5t8>r1!M-9&UN-Le03(>R}P(kx*agP^cd`W?#r->10{>k#K*+ zh-{2J7}*s$7&#enB3{&BS)`dyBf5wc*cH((Tx{JP?TPMSQRFbrb>EHlQ1;+S9nJn3 zy+GN6C*`Y?@*gaoF-z5RlDbYx4JBs}b;$Wz^fl{r z>Y8#mimoagH6{Y7v6higY?GwQsWPO+u2D;A{@tKI8J)r1RFt~YabLma~vR*Ih~XdQsqb`GIdG$zLIMQSJpCKtJGhT z#?xss#!b}MOKFy>L&}^;{~Y?4@@u8cc5*K#%__=V1JPMv3PEE_ny9(W|0c(lhNc%Q&?M|+E@^0ecFf(sL})Fo{2U<1sf&Vxwrpz$&Ol9B=) zEJy0A=;0c$mbfpGK%)n#!J&o}?MSJ1_%-Bo4K`z70g@K!i{x(vBKaZhP}@c6!qRd}hk{ZKH&C(scl_6EUAh>~FIXKK0TEkq8o}_j#Dt zrb_X1`nCD>=dlvPoS@w|p`%_(5aw9yM^lSK$%wA6gLKk1;cif(i@oY7oK>SqcrPsr z+UwEBiz;PKl_GikQ5GgoMvp+hwK1-UR<-n0AB25*)&BA}O8exF*rlklI%;GymSsHO zM0@rltM0P3mxRX7Eu3-$&%N zT=36Q)2D0s>SQM^d>D_PpTr;MF48^D4CFf8g6?6$*N5BCRqP9Ngk6P>;vSU!d2sr9 zhw&z^JiliAJLk8IEa$h43&wxr(sO`w7rW1Wz zE~0F+`lo2xV1D!GY`5|)>rTrHZHTl+dn%$8*H&!jb8p4Tareg;#h-~k7k{&2d*ywV z4~_rN33tVxoA3rYTVKeSHJ}#Mfd;SuMpPP$`CI~)BB4E8Z3I)nG%yD=GmcxqT(FRI z_Zu-JI1{}!kz+P!!FtUnT*URo=%N$ZFC)GJti&3x=I<`z>j>9_4W!)!Zl<(tgxe|W z8{i@EO|S#(1P^m>7kC_eAN&A30iFau1bvkCG}sIFf&JhBc$T{U3H${76#O&zSFRr- zd>$MIFMuQ9DEJv={T%!P{1O}kFM@vBaGZQ8!V`oi2~QE8=3bh7zao5z@MXeR2yMbw z3Ev?6HQ{f-Z^7@tTU z3)8ePO$*bsFii{7iqRvnc@OoB%;*e^c44#&qg@#7!sr}~c44#&qg@#7!e|#pyO%J! zpSpb}r!|w)B}~p}CTBF0Gn&a6SnR@L7Z$s)*wrk~XclKQi!++V864WQA8U>hRXhRCSWT|nA}$nHyOj5JZpY#^g? zKD90)>;%50_a)lJ-@ZgW;|s($kZu#$1|BBwF2cvb_rVXq6W~ekL(oV1r@>yZ59|jA zfN#yqrF)3$&x6C@1#ko$1wW&lpMzh3UxH)cMR1&ZC%`Fins)fsJEN_4MqBTUw%+bA z8pvo3WV8k{S_2ua0S}J5SZfcCyIAXT4fq`Qu-3wH4{I$P_cX^na|-b!`DTEbpb5+Z zvw_cP&lGvf)7rrzJNjwuVBZ`psDlM{u%OP6r?ta;W-Jgx_um`iS_g~N_N(mqR?q2ufrd0qtlGOjvnXeu{;aq`H*8qD3+v!el14+(qefIt^{4+axEU|nRtl2&x6C@1#ko$ z1*N??&fn6b6NJ*MQ-o*1dGI!P2V6kLQCeD|dQkc-W#rP{t8}Zg+UDiesN94t6DC|L z%Q&)(Um~v|wIVB@vBf91dRi-nTFO4~a< zag|N!`e2lbzx|lXRQlM(@5RM>f2a-8>??) z^C zezmg!Jm-1p@;r4J0rEDsgtxFgywlDh+^F>x%=-5$o%!=48@<^>^p-+r4zqlB6g|o8 ze)#8s|HQS?m5r`!bY-I}8(rDx${s;iDRh-WS1ELrLRTqtmBKoRPHe3cTkFKuGkIIj ze{4PfvGx4N9!4iJix-{9EM9aXvv|>o%;Igv9c zj*;Z8vx>2sGOnfMCA=HRQ*=Amz5yNr-vm3rPVf|Ic7uNeKLUG5A3XW`xt{_jjVi`q ziZPgC45rMh8N=6rKLZ~D9|f$>FgA}eHdBK$@1osXs`NP0%sV$^=FJ-jr4=nijwh4L z%-dz=&07Yoyid=(ix$9tkMw62@*XMN>qM&M%#wFWM_U93iy#b>S+_F^%SN^aaGROO zm9R|SBOO@gz%mDxIk3!uWeyg>!6Gr*>eL-Ix7cmwQ>CdYzS!obkTwgv%<&RfZLnwOAuoGtOcA z!$yNQhyo)^olYTJ;JuD#-enIzho1~)jQK$FhG1-ml&s)N`mwaEye&L`$8@mLhm{{w z(kfC?s%lkEa)|WCl9L(n74%${Tq3J6)7OmgyD<_l;!0vEsjXnE z(}OvF%!Wl}5+M&PD=q7Cap}V-EQyrnFXUmcW^53WTQQn&L@ujVp_8#4O5bDFhpJuP zm87LrDzEg2wO4iKky?gRJ{7ZzZBRLfw5r&LQn>~>)re)cB&n%b&ag3b9%*Jyqr2sF|b&J_t)%aGCMMjCjPcqx1SA@ zW#vA~%Kd!46I#f|i9v69}%JKW8D z8z4W9xLU35C)MhHlUm)MqgMBu)$0B{-kcAxmh>!Z{7cmu|7X-1{|erjUZd1EIKQY? z`u|F;^lxE}{{lb!c#oC-zfmjw_p;Le2j)Gp(!Wiu^xv;m`X5j${a@pUa8r%1o6}gA zd6Z3l7sJtR3i6MOhgM4Nh6R=+J=K@w`vg6Res6$e|-px=W5=3 zn7Txt`qw~8GSb7~2yAf!8Vh(-F=WJyC$aFl8tK#o8C5t*^R*Ujnv4_wus)Pbg4|^l zFrtcQu@}WOVvS3A8c_@s7Wz6LkDh~5dciL`)mbb-`VgFAOY8J$k;J0*@q-AFzZ6o2 z|1^*>Uc@-0R0>Hq+)>oRrFR2P`(cE33H(EzJw6(cdnux5AsBrz`Y{|tyY+*ZsPaob Lv2k&(YYXpU-|wF1 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 SfEmmJ6j0*IP=xsjCJz8!b)(h* diff --git a/Modules/build/Release-iphoneos/PrinterClient.swiftmodule/arm64-apple-ios.swiftmodule b/Modules/build/Release-iphoneos/PrinterClient.swiftmodule/arm64-apple-ios.swiftmodule deleted file mode 100644 index 8ac46df725a181329253a52a6fb87bcfbebf03ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41012 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 diff --git a/Modules/build/Release-iphoneos/PrinterClient.swiftmodule/arm64.swiftdoc b/Modules/build/Release-iphoneos/PrinterClient.swiftmodule/arm64.swiftdoc deleted file mode 100644 index 785ad952f670c42bed103142d5edf5a09103a39c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 576 zcmaDfX9YVW2Lpp90|Ns)qlJ#c+7Dby0=U-%aP4>CT5rI$Ux91Q2d>2%xY!*xUFbQa zy@N^j#3Ahshx9v`wD%m+SaZl(Xp58P1t*OOP8vYc#=uE?50mBX(b9}sYS(^`FRSadZv0t3L3>A!JNdrbX`MZ0|Pw+Jri?1Q-x$? z5hF`IV*||`pg93WnRz9tMb0^ysd*(p{yZQ~EXp-A(M<%|pqrUrY-p-y02F0lXcc5& zumaLXYyv!92N>3X+yVlO3_fht7es)p=|Eg;WoV3Is-t6=El}JOWKUXRa;idFei6_) zAPW^ri&Ik+O7ayPQ&RMUQgidmQWXjyE-F??%u9iAGV{_wR)Me+5bNvfD^O$@7tjzG SfEmmJ6j0*IP=xsjCJz8!b)(h* diff --git a/Modules/build/Release-iphoneos/PrinterClient.swiftmodule/arm64.swiftmodule b/Modules/build/Release-iphoneos/PrinterClient.swiftmodule/arm64.swiftmodule deleted file mode 100644 index 8ac46df725a181329253a52a6fb87bcfbebf03ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41012 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 diff --git a/PROJECT_NAME.xcodeproj/project.pbxproj b/PROJECT_NAME.xcodeproj/project.pbxproj index 010b116..67584ef 100644 --- a/PROJECT_NAME.xcodeproj/project.pbxproj +++ b/PROJECT_NAME.xcodeproj/project.pbxproj @@ -7,10 +7,13 @@ objects = { /* Begin PBXBuildFile section */ + BD05E4892987E76700D6EA73 /* APITokensProtocolConformance.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD05E4882987E76700D6EA73 /* APITokensProtocolConformance.swift */; }; BD1B2304274679C100F9B140 /* Localizations in Frameworks */ = {isa = PBXBuildFile; productRef = BD1B2303274679C100F9B140 /* Localizations */; }; BD2B080727833D070066D559 /* AppFeature in Frameworks */ = {isa = PBXBuildFile; productRef = BD2B080627833D070066D559 /* AppFeature */; }; BD2FEFDB2768CA5C00E80BBC /* APIClientLive in Frameworks */ = {isa = PBXBuildFile; productRef = BD2FEFDA2768CA5C00E80BBC /* APIClientLive */; }; BD3196EC2796EC1F0077C271 /* ProjectConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD3196EB2796CC900077C271 /* ProjectConfig.swift */; }; + BD8F63772980199E000EA587 /* LiveDependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD8F63762980199E000EA587 /* LiveDependencies.swift */; }; + BD8F637929801BC5000EA587 /* EnvVars.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD8F637829801BC5000EA587 /* EnvVars.swift */; }; BDC6D5E9279183590028D211 /* PersistenceClient in Frameworks */ = {isa = PBXBuildFile; productRef = BDC6D5E8279183590028D211 /* PersistenceClient */; }; BDCA8DA12742611B00195B05 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDCA8DA02742611B00195B05 /* AppDelegate.swift */; }; BDCA8DAA2742611D00195B05 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BDCA8DA92742611D00195B05 /* Assets.xcassets */; }; @@ -31,9 +34,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + BD05E4882987E76700D6EA73 /* APITokensProtocolConformance.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APITokensProtocolConformance.swift; sourceTree = ""; }; BD3196E92796CB440077C271 /* Production.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Production.xcconfig; sourceTree = ""; }; - BD3196EA2796CB690077C271 /* Test.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Test.xcconfig; sourceTree = ""; }; + BD3196EA2796CB690077C271 /* Staging.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Staging.xcconfig; sourceTree = ""; }; BD3196EB2796CC900077C271 /* ProjectConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProjectConfig.swift; sourceTree = ""; }; + BD8F63762980199E000EA587 /* LiveDependencies.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LiveDependencies.swift; sourceTree = ""; }; + BD8F637829801BC5000EA587 /* EnvVars.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvVars.swift; sourceTree = ""; }; BDCA8D9D2742611B00195B05 /* PROJECT_NAME.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PROJECT_NAME.app; sourceTree = BUILT_PRODUCTS_DIR; }; BDCA8DA02742611B00195B05 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; BDCA8DA92742611D00195B05 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -90,8 +96,11 @@ BDCA8DAB2742611D00195B05 /* LaunchScreen.storyboard */, BDCA8DAE2742611D00195B05 /* Info.plist */, BD3196E92796CB440077C271 /* Production.xcconfig */, - BD3196EA2796CB690077C271 /* Test.xcconfig */, + BD3196EA2796CB690077C271 /* Staging.xcconfig */, BD3196EB2796CC900077C271 /* ProjectConfig.swift */, + BD8F63762980199E000EA587 /* LiveDependencies.swift */, + BD8F637829801BC5000EA587 /* EnvVars.swift */, + BD05E4882987E76700D6EA73 /* APITokensProtocolConformance.swift */, ); path = App; sourceTree = ""; @@ -217,6 +226,9 @@ buildActionMask = 2147483647; files = ( BD3196EC2796EC1F0077C271 /* ProjectConfig.swift in Sources */, + BD05E4892987E76700D6EA73 /* APITokensProtocolConformance.swift in Sources */, + BD8F637929801BC5000EA587 /* EnvVars.swift in Sources */, + BD8F63772980199E000EA587 /* LiveDependencies.swift in Sources */, BDCA8DA12742611B00195B05 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -237,7 +249,7 @@ /* Begin XCBuildConfiguration section */ BDA09B442756276400E95F61 /* Test */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD3196EA2796CB690077C271 /* Test.xcconfig */; + baseConfigurationReference = BD3196EA2796CB690077C271 /* Staging.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -284,7 +296,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; @@ -328,7 +340,7 @@ }; BDCA8DAF2742611D00195B05 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BD3196EA2796CB690077C271 /* Test.xcconfig */; + baseConfigurationReference = BD3196EA2796CB690077C271 /* Staging.xcconfig */; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; @@ -380,7 +392,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -440,7 +452,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.6; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; diff --git a/PROJECT_NAME.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/PROJECT_NAME.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 68b83a7..29f3a60 100644 --- a/PROJECT_NAME.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/PROJECT_NAME.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,88 +1,113 @@ { - "object": { - "pins": [ - { - "package": "combine-schedulers", - "repositoryURL": "https://github.com/pointfreeco/combine-schedulers", - "state": { - "branch": null, - "revision": "4cf088c29a20f52be0f2ca54992b492c54e0076b", - "version": "0.5.3" - } - }, - { - "package": "NStackSDK", - "repositoryURL": "https://github.com/nstack-io/nstack-ios-sdk", - "state": { - "branch": "feature/spm-support", - "revision": "faf1c7d9cbf47e89fbe7b4da593736b2d4bd5d91", - "version": null - } - }, - { - "package": "swift-case-paths", - "repositoryURL": "https://github.com/pointfreeco/swift-case-paths", - "state": { - "branch": null, - "revision": "241301b67d8551c26d8f09bd2c0e52cc49f18007", - "version": "0.8.0" - } - }, - { - "package": "swift-collections", - "repositoryURL": "https://github.com/apple/swift-collections", - "state": { - "branch": null, - "revision": "48254824bb4248676bf7ce56014ff57b142b77eb", - "version": "1.0.2" - } - }, - { - "package": "swift-identified-collections", - "repositoryURL": "https://github.com/pointfreeco/swift-identified-collections", - "state": { - "branch": null, - "revision": "680bf440178a78a627b1c2c64c0855f6523ad5b9", - "version": "0.3.2" - } - }, - { - "package": "swift-tagged", - "repositoryURL": "https://github.com/pointfreeco/swift-tagged", - "state": { - "branch": null, - "revision": "f3f773a5e13f3c8f0ab1ce2ae6378058acefa87d", - "version": "0.7.0" - } - }, - { - "package": "swiftui-navigation", - "repositoryURL": "https://github.com/pointfreeco/swiftui-navigation", - "state": { - "branch": null, - "revision": "2694c03284a368168b3e0b8d7ab52626802d2246", - "version": "0.1.0" - } - }, - { - "package": "LocalizationManager", - "repositoryURL": "https://github.com/nodes-ios/TranslationManager", - "state": { - "branch": null, - "revision": "3cac667c95c7f6df72e5627b3325415709ee8d89", - "version": "3.1.3" - } - }, - { - "package": "xctest-dynamic-overlay", - "repositoryURL": "https://github.com/pointfreeco/xctest-dynamic-overlay", - "state": { - "branch": null, - "revision": "16e6409ee82e1b81390bdffbf217b9c08ab32784", - "version": "0.5.0" - } + "pins" : [ + { + "identity" : "combine-schedulers", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/combine-schedulers", + "state" : { + "revision" : "882ac01eb7ef9e36d4467eb4b1151e74fcef85ab", + "version" : "0.9.1" } - ] - }, - "version": 1 + }, + { + "identity" : "nstack-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/nstack-io/nstack-ios-sdk", + "state" : { + "branch" : "feature/spm-support", + "revision" : "23f10afa8ffeef6ba6c56f017b2d2a5f5311f9e3" + } + }, + { + "identity" : "swift-case-paths", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-case-paths", + "state" : { + "revision" : "c3a42e8d1a76ff557cf565ed6d8b0aee0e6e75af", + "version" : "0.11.0" + } + }, + { + "identity" : "swift-clocks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-clocks", + "state" : { + "revision" : "20b25ca0dd88ebfb9111ec937814ddc5a8880172", + "version" : "0.2.0" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections", + "state" : { + "revision" : "937e904258d22af6e447a0b72c0bc67583ef64a2", + "version" : "1.0.4" + } + }, + { + "identity" : "swift-custom-dump", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-custom-dump", + "state" : { + "revision" : "87dd388a193569b288d03cb4060db54f90d1a66f", + "version" : "0.7.0" + } + }, + { + "identity" : "swift-dependencies", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-dependencies", + "state" : { + "revision" : "8282b0c59662eb38946afe30eb403663fc2ecf76", + "version" : "0.1.4" + } + }, + { + "identity" : "swift-identified-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-identified-collections", + "state" : { + "revision" : "fd34c544ad27f3ba6b19142b348005bfa85b6005", + "version" : "0.6.0" + } + }, + { + "identity" : "swift-tagged", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-tagged", + "state" : { + "revision" : "af06825aaa6adffd636c10a2570b2010c7c07e6a", + "version" : "0.9.0" + } + }, + { + "identity" : "swiftui-navigation", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swiftui-navigation", + "state" : { + "revision" : "270a754308f5440be52fc295242eb7031638bd15", + "version" : "0.6.1" + } + }, + { + "identity" : "translationmanager", + "kind" : "remoteSourceControl", + "location" : "https://github.com/nodes-ios/TranslationManager", + "state" : { + "revision" : "917de7fbe7ebe58862add784a67916bc98a79356", + "version" : "3.1.5" + } + }, + { + "identity" : "xctest-dynamic-overlay", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay", + "state" : { + "revision" : "16b23a295fa322eb957af98037f86791449de60f", + "version" : "0.8.1" + } + } + ], + "version" : 2 } diff --git a/PROJECT_NAME.xcodeproj/xcshareddata/xcschemes/PROJECT_NAME.xcscheme b/PROJECT_NAME.xcodeproj/xcshareddata/xcschemes/PROJECT_NAME.xcscheme index d9a6d83..832e86f 100644 --- a/PROJECT_NAME.xcodeproj/xcshareddata/xcschemes/PROJECT_NAME.xcscheme +++ b/PROJECT_NAME.xcodeproj/xcshareddata/xcschemes/PROJECT_NAME.xcscheme @@ -28,36 +28,6 @@ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - - - - - - - - - Date: Wed, 1 Feb 2023 15:39:54 +0100 Subject: [PATCH 04/10] fix: add live Network client dependency --- App/LiveDependencies.swift | 7 + .../APIClientLiveTests.swift | 137 ------------------ 2 files changed, 7 insertions(+), 137 deletions(-) diff --git a/App/LiveDependencies.swift b/App/LiveDependencies.swift index 4860ed0..d5c4009 100644 --- a/App/LiveDependencies.swift +++ b/App/LiveDependencies.swift @@ -12,6 +12,7 @@ import Dependencies import Foundation import Localizations import Model +import NetworkClient import NStackSDK import PersistenceClient import TokenHandler @@ -73,3 +74,9 @@ extension ObservableLocalizations: DependencyKey { } } +extension NetworkClient: DependencyKey { + public static var liveValue: NetworkClient { + .live(queue: .main) + } +} + diff --git a/Modules/Tests/APIClientLiveTests/APIClientLiveTests.swift b/Modules/Tests/APIClientLiveTests/APIClientLiveTests.swift index 3dd7f57..a6b5b20 100644 --- a/Modules/Tests/APIClientLiveTests/APIClientLiveTests.swift +++ b/Modules/Tests/APIClientLiveTests/APIClientLiveTests.swift @@ -13,141 +13,4 @@ import XCTest final class APIClientLiveTests: XCTestCase { - var formatter: DateFormatter = { - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ" - return formatter - }() - - let tokenSuccessResponseData = """ - { - "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiOSIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjQyNjgxMzU1LCJleHAiOjE2NDI2ODI1NTUsImlhdCI6MTY0MjY4MTM1NX0.TUt15w5BOJfeekhM4TY0qdCHNlr4qtDIVdh_S6MzwTI", - "refreshToken": { - "token": "6/IOyrlaxkYSI/hqVrDFgzn2tefXfKrVNQJvEIJ32gMhDDNAkmDMYiNogS4LvdS3r3CLuRqbiWWNLcTby3i9xg==", - "expiresAt": "2022-04-20T12:22:35.3876411Z" - } - } - """.data(using: .utf8)! - - lazy var newTokens = APITokensEnvelope( - token: .init( - rawValue: - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiOSIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjQyNjgxMzU1LCJleHAiOjE2NDI2ODI1NTUsImlhdCI6MTY0MjY4MTM1NX0.TUt15w5BOJfeekhM4TY0qdCHNlr4qtDIVdh_S6MzwTI" - ), - refreshToken: .init( - token: .init( - rawValue: - "6/IOyrlaxkYSI/hqVrDFgzn2tefXfKrVNQJvEIJ32gMhDDNAkmDMYiNogS4LvdS3r3CLuRqbiWWNLcTby3i9xg==" - ), - expiresAt: formatter.date(from: "2022-04-20T12:22:35.3876411Z")! - ) - ) - - var cancellables: Set = [] - - func test_refreshing_expired_token() throws { - let successResponse = HTTPURLResponse( - url: URL(string: ":")!, statusCode: 200, httpVersion: nil, headerFields: nil)! - let now = Date.distantFuture - var tokens = APITokensEnvelope.mock - - tokens.token = .expired - let networkPublisherSubject = PassthroughSubject< - URLSession.DataTaskPublisher.Output, URLSession.DataTaskPublisher.Failure - >() - - let apiURLRequest: URLRequest = URLRequest(url: URL(string: ":")!) - let refreshURL = URL(string: "refresh://")! - - var requestsMade: [URLRequest] = [] - - let authHandler = AuthenticationHandler( - now: { now }, - networkRequestPublisher: { request in - requestsMade.append(request) - return networkPublisherSubject.eraseToAnyPublisher() - }, - refreshURL: refreshURL, - apiTokens: tokens - ) - - var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] - - XCTAssertNil(authHandler.refreshPublisher) // Not yet refreshing - authHandler.authenticateRequest(apiURLRequest) // Make the api call - .sink( - receiveCompletion: { _ in }, - receiveValue: { - valuesReceived.append($0) - - } - ).store(in: &cancellables) - XCTAssertNotNil(authHandler.refreshPublisher) // Refresh started - - XCTAssertEqual(requestsMade.count, 1) - XCTAssertEqual(requestsMade.first?.url, refreshURL) // Refreash call was made - networkPublisherSubject.send((tokenSuccessResponseData, successResponse)) // Refreshcall returns successfully with tokens - - XCTAssertEqual(authHandler.apiTokens, newTokens) // We now have new tokens - networkPublisherSubject.send((tokenSuccessResponseData, successResponse)) // Now original api call is made and for convenience we just send the same data again - networkPublisherSubject.send(completion: .finished) - XCTAssertNil(authHandler.refreshPublisher) // Refresh was terminated - XCTAssertEqual(valuesReceived.count, 1) - let result = try XCTUnwrap(valuesReceived.first) - XCTAssertEqual(result.data, tokenSuccessResponseData) // Original api call successfully returned some data - } - - func test_refreshing_expired_token_while_multiple_calls_made() throws { - let successResponse = HTTPURLResponse( - url: URL(string: ":")!, statusCode: 200, httpVersion: nil, headerFields: nil)! - let now = Date.distantFuture - var tokens = APITokensEnvelope.mock - - tokens.token = .expired - let networkPublisherSubject = PassthroughSubject< - URLSession.DataTaskPublisher.Output, URLSession.DataTaskPublisher.Failure - >() - - let apiURLRequest: URLRequest = URLRequest(url: URL(string: ":")!) - let refreshURL = URL(string: "refresh://")! - - var requestsMade: [URLRequest] = [] - - let authHandler = AuthenticationHandler( - now: { now }, - networkRequestPublisher: { request in - requestsMade.append(request) - return networkPublisherSubject.eraseToAnyPublisher() - }, - refreshURL: refreshURL, - apiTokens: tokens - ) - - var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] - - XCTAssertNil(authHandler.refreshPublisher) // Not yet refreshing - authHandler.authenticateRequest(apiURLRequest) // Make the api call - .sink( - receiveCompletion: { _ in }, - receiveValue: { - valuesReceived.append($0) - - } - ).store(in: &cancellables) - XCTAssertNotNil(authHandler.refreshPublisher) // Refresh started - - XCTAssertEqual(requestsMade.count, 1) - XCTAssertEqual(requestsMade.first?.url, refreshURL) // Refreash call was made - networkPublisherSubject.send((tokenSuccessResponseData, successResponse)) // Refreshcall returns successfully with tokens - - XCTAssertEqual(authHandler.apiTokens, newTokens) // We now have new tokens - networkPublisherSubject.send((tokenSuccessResponseData, successResponse)) // Now original api call is made and for convenience we just send the same data again - networkPublisherSubject.send(completion: .finished) - XCTAssertNil(authHandler.refreshPublisher) // Refresh was terminated - XCTAssertEqual(valuesReceived.count, 1) - let result = try XCTUnwrap(valuesReceived.first) - XCTAssertEqual(result.data, tokenSuccessResponseData) // Original api call successfully returned some data - } - } From 3b0978b5d6cda4653d2420256746192e3999558c Mon Sep 17 00:00:00 2001 From: Jakob Mygind Date: Thu, 2 Feb 2023 14:16:22 +0100 Subject: [PATCH 05/10] feat: Add sample api request --- Modules/Sources/APIClient/Client.swift | 4 + Modules/Sources/APIClient/Mocks.swift | 1 + Modules/Sources/APIClientLive/Client.swift | 75 +- .../APIClientLive/RequestBuilders.swift | 56 +- .../Sources/Localizations/Localizations.swift | 1134 ++++++++--------- .../{Product.swift => ExampleProduct.swift} | 8 +- Modules/Sources/Model/Mocks.swift | 8 +- 7 files changed, 692 insertions(+), 594 deletions(-) rename Modules/Sources/Model/{Product.swift => ExampleProduct.swift} (81%) diff --git a/Modules/Sources/APIClient/Client.swift b/Modules/Sources/APIClient/Client.swift index 5fee783..ced2345 100644 --- a/Modules/Sources/APIClient/Client.swift +++ b/Modules/Sources/APIClient/Client.swift @@ -14,17 +14,20 @@ import XCTestDynamicOverlay public struct APIClient { public var authenticate: (Username, Password) async throws -> APITokensEnvelope + public var fetchExampleProducts: () async throws -> [ExampleProduct] public var setBaseURL: (URL) -> Void public var currentBaseURL: () -> URL public var tokensUpdateStream: AsyncStream public init( authenticate: @escaping (Username, Password) async throws -> APITokensEnvelope, + fetchExampleProducts: @escaping () async throws -> [ExampleProduct], setBaseURL: @escaping (URL) -> Void, currentBaseURL: @escaping () -> URL, tokensUpdateStream: AsyncStream ) { self.authenticate = authenticate + self.fetchExampleProducts = fetchExampleProducts self.setBaseURL = setBaseURL self.currentBaseURL = currentBaseURL self.tokensUpdateStream = tokensUpdateStream @@ -35,6 +38,7 @@ public struct APIClient { extension APIClient { public static let failing = APIClient( authenticate: unimplemented("authenticate failing endpoint called"), + fetchExampleProducts: unimplemented("fetchExampleProducts"), setBaseURL: unimplemented("setBaseURL"), currentBaseURL: unimplemented("currentBaseURL"), tokensUpdateStream: unimplemented("tokensUpdateStream") diff --git a/Modules/Sources/APIClient/Mocks.swift b/Modules/Sources/APIClient/Mocks.swift index 01ae5e6..797a82d 100644 --- a/Modules/Sources/APIClient/Mocks.swift +++ b/Modules/Sources/APIClient/Mocks.swift @@ -12,6 +12,7 @@ import Model extension APIClient { public static let mock = Self( authenticate: { _, _ in .mock }, + fetchExampleProducts: { .mocks(5) }, setBaseURL: { _ in }, currentBaseURL: { URL.init(string: ":")! }, tokensUpdateStream: .init(unfolding: { .none }) diff --git a/Modules/Sources/APIClientLive/Client.swift b/Modules/Sources/APIClientLive/Client.swift index 1599b1f..baa59e6 100644 --- a/Modules/Sources/APIClientLive/Client.swift +++ b/Modules/Sources/APIClientLive/Client.swift @@ -14,23 +14,64 @@ import XCTestDynamicOverlay extension APIClient { - /// APIClient that hits the network - /// - Parameters: - /// - url: base url to be used - /// - authenticationHandler: AuthenticationHandler type - /// - Returns: Live APIclient - public static func live( - baseURL url: URL, - authenticationHandler: AuthenticationHandlerAsync, - tokensUpdateStream: AsyncStream - ) -> Self { - var baseURL = url - let tokensUpdateStream = tokensUpdateStream - return Self( - authenticate: unimplemented(), - setBaseURL: { baseURL = $0 }, - currentBaseURL: { baseURL }, - tokensUpdateStream: tokensUpdateStream + /// APIClient that hits the network + /// - Parameters: + /// - url: base url to be used + /// - authenticationHandler: AuthenticationHandler type + /// - Returns: Live APIclient + public static func live( + baseURL url: URL, + authenticationHandler: AuthenticationHandlerAsync, + tokensUpdateStream: AsyncStream + ) -> Self { + var baseURL = url + let tokensUpdateStream = tokensUpdateStream + return Self( + authenticate: unimplemented(), + fetchExampleProducts: { + try await performAuthenticatedRequest( + makeGetRequest(url: baseURL.appendingPathComponent("products")), + using: authenticationHandler ) + }, + setBaseURL: { baseURL = $0 }, + currentBaseURL: { baseURL }, + tokensUpdateStream: tokensUpdateStream + ) + } +} + +func performAuthenticatedRequest( + _ request: URLRequest, + using authHandler: AuthenticationHandlerAsync, + file: StaticString = #file, + line: UInt = #line, + jsonDecoder: JSONDecoder = { + let decoder = JSONDecoder() + let formatter = DateFormatter() + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS" + decoder.dateDecodingStrategy = .formatted(formatter) + return decoder + }() +) async throws -> Output { + do { + let (data, response) = try await authHandler.performAuthenticatedRequest(request) + do { + + let decoded = try jsonDecoder.decode(Output.self, from: data) + return decoded + } catch is DecodingError { + var decodedError = try jsonDecoder.decode(APIError.self, from: data) + if let code = (response as? HTTPURLResponse)?.statusCode { + decodedError.errorCode = "\(code)" + } + throw decodedError + } + } catch { + if let error = error as? APIError { + throw error } + throw APIError(error: error, file: file, line: line) + } } diff --git a/Modules/Sources/APIClientLive/RequestBuilders.swift b/Modules/Sources/APIClientLive/RequestBuilders.swift index 97807b8..782b63f 100644 --- a/Modules/Sources/APIClientLive/RequestBuilders.swift +++ b/Modules/Sources/APIClientLive/RequestBuilders.swift @@ -22,11 +22,63 @@ struct AnyEncodable: Encodable { } extension URLRequest { - func authenticateAndPerform(using handler: AuthenticationHandlerAsync) async throws -> URLSession.DataTaskPublisher.Output { - try await handler.performAuthenticatedRequest(self) + func authenticateAndPerform(using handler: AuthenticationHandlerAsync) async throws -> Value { + do { + let data = try await handler.performAuthenticatedRequest(self) + } catch { + + } } } +func apiDecode( + as type: A.Type, + file: StaticString = #file, + line: UInt = #line, + jsonDecoder: JSONDecoder = { + let decoder = JSONDecoder() + let formatter = DateFormatter() + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS" + decoder.dateDecodingStrategy = .formatted(formatter) + return decoder + }(), + overrideDateFormat: String? = nil, + for request: URLRequest? = nil +) async throws -> A { + self + + .mapError { APIError(error: $0, file: file, line: line) } + .flatMap { data, response -> AnyPublisher in + do { + return try Just(jsonDecoder.decode(A.self, from: data)) + .setFailureType(to: APIError.self) + .eraseToAnyPublisher() + } catch let decodingError { + if let request = request { + debugPrint( + "\(#function) \(decodingError) \ndata: \(String(data: data, encoding: .utf8) ?? "-")\nRequest: \(request)" + ) + } else { + debugPrint( + "\(#function) \(decodingError) \ndata: \(String(data: data, encoding: .utf8) ?? "-")" + ) + } + do { + var decodedError = try jsonDecoder.decode(APIError.self, from: data) + if let code = (response as? HTTPURLResponse)?.statusCode { + decodedError.errorCode = "\(code)" + } + return Fail(error: decodedError) + .eraseToAnyPublisher() + } catch { + return Fail(error: APIError(error: decodingError)).eraseToAnyPublisher() + } + } + } + .eraseToAnyPublisher() +} + func apiRequest(_ method: Method) -> URLRequest { var request: URLRequest diff --git a/Modules/Sources/Localizations/Localizations.swift b/Modules/Sources/Localizations/Localizations.swift index 91ae203..db68e26 100644 --- a/Modules/Sources/Localizations/Localizations.swift +++ b/Modules/Sources/Localizations/Localizations.swift @@ -33,34 +33,34 @@ import NLocalizationManager import LocalizationManager #endif public final class Localizations: LocalizableModel { - public var defaultSection = DefaultSection() - public var login = Login() - public var printer = Printer() - public var dashboard = Dashboard() public var searchOrders = SearchOrders() + public var orderDetailNewOrderSection = OrderDetailNewOrderSection() + public var printer = Printer() + public var orderStatus = OrderStatus() + public var printerOutput = PrinterOutput() public var error = Error() - public var units = Units() + public var login = Login() + public var orderDetails = OrderDetails() public var deliveryType = DeliveryType() public var settings = Settings() - public var orderDetails = OrderDetails() - public var orderDetailNewOrderSection = OrderDetailNewOrderSection() - public var printerOutput = PrinterOutput() - public var orderStatus = OrderStatus() + public var defaultSection = DefaultSection() + public var dashboard = Dashboard() + public var units = Units() enum CodingKeys: String, CodingKey { - case defaultSection = "default" - case login - case printer - case dashboard case searchOrders + case orderDetailNewOrderSection + case printer + case orderStatus + case printerOutput case error - case units + case login + case orderDetails case deliveryType case settings - case orderDetails - case orderDetailNewOrderSection - case printerOutput - case orderStatus + case defaultSection = "default" + case dashboard + case units } public override init() { super.init() } @@ -68,69 +68,69 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - defaultSection = try container.decodeIfPresent(DefaultSection.self, forKey: .defaultSection) ?? defaultSection - login = try container.decodeIfPresent(Login.self, forKey: .login) ?? login - printer = try container.decodeIfPresent(Printer.self, forKey: .printer) ?? printer - dashboard = try container.decodeIfPresent(Dashboard.self, forKey: .dashboard) ?? dashboard searchOrders = try container.decodeIfPresent(SearchOrders.self, forKey: .searchOrders) ?? searchOrders + orderDetailNewOrderSection = try container.decodeIfPresent(OrderDetailNewOrderSection.self, forKey: .orderDetailNewOrderSection) ?? orderDetailNewOrderSection + printer = try container.decodeIfPresent(Printer.self, forKey: .printer) ?? printer + orderStatus = try container.decodeIfPresent(OrderStatus.self, forKey: .orderStatus) ?? orderStatus + printerOutput = try container.decodeIfPresent(PrinterOutput.self, forKey: .printerOutput) ?? printerOutput error = try container.decodeIfPresent(Error.self, forKey: .error) ?? error - units = try container.decodeIfPresent(Units.self, forKey: .units) ?? units + login = try container.decodeIfPresent(Login.self, forKey: .login) ?? login + orderDetails = try container.decodeIfPresent(OrderDetails.self, forKey: .orderDetails) ?? orderDetails deliveryType = try container.decodeIfPresent(DeliveryType.self, forKey: .deliveryType) ?? deliveryType settings = try container.decodeIfPresent(Settings.self, forKey: .settings) ?? settings - orderDetails = try container.decodeIfPresent(OrderDetails.self, forKey: .orderDetails) ?? orderDetails - orderDetailNewOrderSection = try container.decodeIfPresent(OrderDetailNewOrderSection.self, forKey: .orderDetailNewOrderSection) ?? orderDetailNewOrderSection - printerOutput = try container.decodeIfPresent(PrinterOutput.self, forKey: .printerOutput) ?? printerOutput - orderStatus = try container.decodeIfPresent(OrderStatus.self, forKey: .orderStatus) ?? orderStatus + defaultSection = try container.decodeIfPresent(DefaultSection.self, forKey: .defaultSection) ?? defaultSection + dashboard = try container.decodeIfPresent(Dashboard.self, forKey: .dashboard) ?? dashboard + units = try container.decodeIfPresent(Units.self, forKey: .units) ?? units } public override subscript(key: String) -> LocalizableSection? { switch key { - case CodingKeys.defaultSection.stringValue: return defaultSection - case CodingKeys.login.stringValue: return login - case CodingKeys.printer.stringValue: return printer - case CodingKeys.dashboard.stringValue: return dashboard case CodingKeys.searchOrders.stringValue: return searchOrders + case CodingKeys.orderDetailNewOrderSection.stringValue: return orderDetailNewOrderSection + case CodingKeys.printer.stringValue: return printer + case CodingKeys.orderStatus.stringValue: return orderStatus + case CodingKeys.printerOutput.stringValue: return printerOutput case CodingKeys.error.stringValue: return error - case CodingKeys.units.stringValue: return units + case CodingKeys.login.stringValue: return login + case CodingKeys.orderDetails.stringValue: return orderDetails case CodingKeys.deliveryType.stringValue: return deliveryType case CodingKeys.settings.stringValue: return settings - case CodingKeys.orderDetails.stringValue: return orderDetails - case CodingKeys.orderDetailNewOrderSection.stringValue: return orderDetailNewOrderSection - case CodingKeys.printerOutput.stringValue: return printerOutput - case CodingKeys.orderStatus.stringValue: return orderStatus + case CodingKeys.defaultSection.stringValue: return defaultSection + case CodingKeys.dashboard.stringValue: return dashboard + case CodingKeys.units.stringValue: return units default: return nil } } - public final class DefaultSection: LocalizableSection { - public var skip = "" - public var edit = "" - public var retry = "" - public var ok = "" - public var no = "" - public var previous = "" - public var back = "" - public var cancel = "" - public var save = "" - public var settings = "" - public var yes = "" - public var later = "" - public var next = "" + public final class SearchOrders: LocalizableSection { + public var orderNumberHeader = "" + public var emptyMessage = "" + public var customerNameHeader = "" + public var orderStatusHeader = "" + public var statusCompleted = "" + public var statusNew = "" + public var statusShipped = "" + public var orderDateHeader = "" + public var statusReady = "" + public var statusRejected = "" + public var searchfieldPlaceholder = "" + public var title = "" + public var statusAccepted = "" enum CodingKeys: String, CodingKey { - case skip - case edit - case retry - case ok - case no - case previous - case back - case cancel - case save - case settings - case yes - case later - case next + case orderNumberHeader + case emptyMessage + case customerNameHeader + case orderStatusHeader + case statusCompleted + case statusNew + case statusShipped + case orderDateHeader + case statusReady + case statusRejected + case searchfieldPlaceholder + case title + case statusAccepted } public override init() { super.init() } @@ -138,64 +138,62 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - skip = try container.decodeIfPresent(String.self, forKey: .skip) ?? "__skip" - edit = try container.decodeIfPresent(String.self, forKey: .edit) ?? "__edit" - retry = try container.decodeIfPresent(String.self, forKey: .retry) ?? "__retry" - ok = try container.decodeIfPresent(String.self, forKey: .ok) ?? "__ok" - no = try container.decodeIfPresent(String.self, forKey: .no) ?? "__no" - previous = try container.decodeIfPresent(String.self, forKey: .previous) ?? "__previous" - back = try container.decodeIfPresent(String.self, forKey: .back) ?? "__back" - cancel = try container.decodeIfPresent(String.self, forKey: .cancel) ?? "__cancel" - save = try container.decodeIfPresent(String.self, forKey: .save) ?? "__save" - settings = try container.decodeIfPresent(String.self, forKey: .settings) ?? "__settings" - yes = try container.decodeIfPresent(String.self, forKey: .yes) ?? "__yes" - later = try container.decodeIfPresent(String.self, forKey: .later) ?? "__later" - next = try container.decodeIfPresent(String.self, forKey: .next) ?? "__next" + orderNumberHeader = try container.decodeIfPresent(String.self, forKey: .orderNumberHeader) ?? "__orderNumberHeader" + emptyMessage = try container.decodeIfPresent(String.self, forKey: .emptyMessage) ?? "__emptyMessage" + customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" + orderStatusHeader = try container.decodeIfPresent(String.self, forKey: .orderStatusHeader) ?? "__orderStatusHeader" + statusCompleted = try container.decodeIfPresent(String.self, forKey: .statusCompleted) ?? "__statusCompleted" + statusNew = try container.decodeIfPresent(String.self, forKey: .statusNew) ?? "__statusNew" + statusShipped = try container.decodeIfPresent(String.self, forKey: .statusShipped) ?? "__statusShipped" + orderDateHeader = try container.decodeIfPresent(String.self, forKey: .orderDateHeader) ?? "__orderDateHeader" + statusReady = try container.decodeIfPresent(String.self, forKey: .statusReady) ?? "__statusReady" + statusRejected = try container.decodeIfPresent(String.self, forKey: .statusRejected) ?? "__statusRejected" + searchfieldPlaceholder = try container.decodeIfPresent(String.self, forKey: .searchfieldPlaceholder) ?? "__searchfieldPlaceholder" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + statusAccepted = try container.decodeIfPresent(String.self, forKey: .statusAccepted) ?? "__statusAccepted" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.skip.stringValue: return skip - case CodingKeys.edit.stringValue: return edit - case CodingKeys.retry.stringValue: return retry - case CodingKeys.ok.stringValue: return ok - case CodingKeys.no.stringValue: return no - case CodingKeys.previous.stringValue: return previous - case CodingKeys.back.stringValue: return back - case CodingKeys.cancel.stringValue: return cancel - case CodingKeys.save.stringValue: return save - case CodingKeys.settings.stringValue: return settings - case CodingKeys.yes.stringValue: return yes - case CodingKeys.later.stringValue: return later - case CodingKeys.next.stringValue: return next + case CodingKeys.orderNumberHeader.stringValue: return orderNumberHeader + case CodingKeys.emptyMessage.stringValue: return emptyMessage + case CodingKeys.customerNameHeader.stringValue: return customerNameHeader + case CodingKeys.orderStatusHeader.stringValue: return orderStatusHeader + case CodingKeys.statusCompleted.stringValue: return statusCompleted + case CodingKeys.statusNew.stringValue: return statusNew + case CodingKeys.statusShipped.stringValue: return statusShipped + case CodingKeys.orderDateHeader.stringValue: return orderDateHeader + case CodingKeys.statusReady.stringValue: return statusReady + case CodingKeys.statusRejected.stringValue: return statusRejected + case CodingKeys.searchfieldPlaceholder.stringValue: return searchfieldPlaceholder + case CodingKeys.title.stringValue: return title + case CodingKeys.statusAccepted.stringValue: return statusAccepted default: return nil } } } - public final class Login: LocalizableSection { - public var loginButton = "" - public var appVersionPrefix = "" - public var emailPlaceholder = "" - public var passwordHeader = "" - public var passwordPlaceholder = "" - public var title = "" - public var emailHeader = "" - public var appName = "" - public var errorInvalidCredentials = "" - public var resetPasswordMessage = "" + public final class OrderDetailNewOrderSection: LocalizableSection { + public var acceptButton = "" + public var customerNameHeader = "" + public var phoneNumberHeader = "" + public var rejectButton = "" + public var deliveryTimeHeader = "" + public var pickedUpInStoreAt = "" + public var header = "" + public var pickupTimeHeader = "" + public var subheader = "" enum CodingKeys: String, CodingKey { - case loginButton - case appVersionPrefix - case emailPlaceholder - case passwordHeader - case passwordPlaceholder - case title - case emailHeader - case appName - case errorInvalidCredentials - case resetPasswordMessage + case acceptButton + case customerNameHeader + case phoneNumberHeader + case rejectButton + case deliveryTimeHeader + case pickedUpInStoreAt + case header + case pickupTimeHeader + case subheader } public override init() { super.init() } @@ -203,54 +201,52 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - loginButton = try container.decodeIfPresent(String.self, forKey: .loginButton) ?? "__loginButton" - appVersionPrefix = try container.decodeIfPresent(String.self, forKey: .appVersionPrefix) ?? "__appVersionPrefix" - emailPlaceholder = try container.decodeIfPresent(String.self, forKey: .emailPlaceholder) ?? "__emailPlaceholder" - passwordHeader = try container.decodeIfPresent(String.self, forKey: .passwordHeader) ?? "__passwordHeader" - passwordPlaceholder = try container.decodeIfPresent(String.self, forKey: .passwordPlaceholder) ?? "__passwordPlaceholder" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - emailHeader = try container.decodeIfPresent(String.self, forKey: .emailHeader) ?? "__emailHeader" - appName = try container.decodeIfPresent(String.self, forKey: .appName) ?? "__appName" - errorInvalidCredentials = try container.decodeIfPresent(String.self, forKey: .errorInvalidCredentials) ?? "__errorInvalidCredentials" - resetPasswordMessage = try container.decodeIfPresent(String.self, forKey: .resetPasswordMessage) ?? "__resetPasswordMessage" + acceptButton = try container.decodeIfPresent(String.self, forKey: .acceptButton) ?? "__acceptButton" + customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" + phoneNumberHeader = try container.decodeIfPresent(String.self, forKey: .phoneNumberHeader) ?? "__phoneNumberHeader" + rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" + deliveryTimeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTimeHeader) ?? "__deliveryTimeHeader" + pickedUpInStoreAt = try container.decodeIfPresent(String.self, forKey: .pickedUpInStoreAt) ?? "__pickedUpInStoreAt" + header = try container.decodeIfPresent(String.self, forKey: .header) ?? "__header" + pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" + subheader = try container.decodeIfPresent(String.self, forKey: .subheader) ?? "__subheader" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.loginButton.stringValue: return loginButton - case CodingKeys.appVersionPrefix.stringValue: return appVersionPrefix - case CodingKeys.emailPlaceholder.stringValue: return emailPlaceholder - case CodingKeys.passwordHeader.stringValue: return passwordHeader - case CodingKeys.passwordPlaceholder.stringValue: return passwordPlaceholder - case CodingKeys.title.stringValue: return title - case CodingKeys.emailHeader.stringValue: return emailHeader - case CodingKeys.appName.stringValue: return appName - case CodingKeys.errorInvalidCredentials.stringValue: return errorInvalidCredentials - case CodingKeys.resetPasswordMessage.stringValue: return resetPasswordMessage + case CodingKeys.acceptButton.stringValue: return acceptButton + case CodingKeys.customerNameHeader.stringValue: return customerNameHeader + case CodingKeys.phoneNumberHeader.stringValue: return phoneNumberHeader + case CodingKeys.rejectButton.stringValue: return rejectButton + case CodingKeys.deliveryTimeHeader.stringValue: return deliveryTimeHeader + case CodingKeys.pickedUpInStoreAt.stringValue: return pickedUpInStoreAt + case CodingKeys.header.stringValue: return header + case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader + case CodingKeys.subheader.stringValue: return subheader default: return nil } } } public final class Printer: LocalizableSection { - public var deleteButton = "" + public var bluetoothHintFooter = "" + public var connectButton = "" public var connectedSuccessMessage = "" public var errorSomethingHappened = "" - public var sectionHeaderNewPrinters = "" - public var connectButton = "" public var sectionHeaderActivePrinter = "" + public var sectionHeaderNewPrinters = "" public var title = "" - public var bluetoothHintFooter = "" + public var deleteButton = "" enum CodingKeys: String, CodingKey { - case deleteButton + case bluetoothHintFooter + case connectButton case connectedSuccessMessage case errorSomethingHappened - case sectionHeaderNewPrinters - case connectButton case sectionHeaderActivePrinter + case sectionHeaderNewPrinters case title - case bluetoothHintFooter + case deleteButton } public override init() { super.init() } @@ -258,66 +254,36 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - deleteButton = try container.decodeIfPresent(String.self, forKey: .deleteButton) ?? "__deleteButton" + bluetoothHintFooter = try container.decodeIfPresent(String.self, forKey: .bluetoothHintFooter) ?? "__bluetoothHintFooter" + connectButton = try container.decodeIfPresent(String.self, forKey: .connectButton) ?? "__connectButton" connectedSuccessMessage = try container.decodeIfPresent(String.self, forKey: .connectedSuccessMessage) ?? "__connectedSuccessMessage" errorSomethingHappened = try container.decodeIfPresent(String.self, forKey: .errorSomethingHappened) ?? "__errorSomethingHappened" - sectionHeaderNewPrinters = try container.decodeIfPresent(String.self, forKey: .sectionHeaderNewPrinters) ?? "__sectionHeaderNewPrinters" - connectButton = try container.decodeIfPresent(String.self, forKey: .connectButton) ?? "__connectButton" sectionHeaderActivePrinter = try container.decodeIfPresent(String.self, forKey: .sectionHeaderActivePrinter) ?? "__sectionHeaderActivePrinter" + sectionHeaderNewPrinters = try container.decodeIfPresent(String.self, forKey: .sectionHeaderNewPrinters) ?? "__sectionHeaderNewPrinters" title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - bluetoothHintFooter = try container.decodeIfPresent(String.self, forKey: .bluetoothHintFooter) ?? "__bluetoothHintFooter" + deleteButton = try container.decodeIfPresent(String.self, forKey: .deleteButton) ?? "__deleteButton" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.deleteButton.stringValue: return deleteButton + case CodingKeys.bluetoothHintFooter.stringValue: return bluetoothHintFooter + case CodingKeys.connectButton.stringValue: return connectButton case CodingKeys.connectedSuccessMessage.stringValue: return connectedSuccessMessage case CodingKeys.errorSomethingHappened.stringValue: return errorSomethingHappened - case CodingKeys.sectionHeaderNewPrinters.stringValue: return sectionHeaderNewPrinters - case CodingKeys.connectButton.stringValue: return connectButton case CodingKeys.sectionHeaderActivePrinter.stringValue: return sectionHeaderActivePrinter + case CodingKeys.sectionHeaderNewPrinters.stringValue: return sectionHeaderNewPrinters case CodingKeys.title.stringValue: return title - case CodingKeys.bluetoothHintFooter.stringValue: return bluetoothHintFooter + case CodingKeys.deleteButton.stringValue: return deleteButton default: return nil } } } - public final class Dashboard: LocalizableSection { - public var columnAcceptedEmpty = "" - public var columnIncomingEmpty = "" - public var columnOutForDelivery = "" - public var columnIncoming = "" - public var allOrdersButton = "" - public var sectionToday = "" - public var sectionTomorrow = "" - public var sectionLater = "" - public var columnAccepted = "" - public var columnReady = "" - public var columnDoneToday = "" - public var itemsPlural = "" - public var itemsSingular = "" - public var columnDoneTodayEmpty = "" - public var columnOutForDeliveryEmpty = "" - public var columnReadyEmpty = "" + public final class OrderStatus: LocalizableSection { + public var accepted = "" enum CodingKeys: String, CodingKey { - case columnAcceptedEmpty - case columnIncomingEmpty - case columnOutForDelivery - case columnIncoming - case allOrdersButton - case sectionToday - case sectionTomorrow - case sectionLater - case columnAccepted - case columnReady - case columnDoneToday - case itemsPlural - case itemsSingular - case columnDoneTodayEmpty - case columnOutForDeliveryEmpty - case columnReadyEmpty + case accepted } public override init() { super.init() } @@ -325,76 +291,36 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - columnAcceptedEmpty = try container.decodeIfPresent(String.self, forKey: .columnAcceptedEmpty) ?? "__columnAcceptedEmpty" - columnIncomingEmpty = try container.decodeIfPresent(String.self, forKey: .columnIncomingEmpty) ?? "__columnIncomingEmpty" - columnOutForDelivery = try container.decodeIfPresent(String.self, forKey: .columnOutForDelivery) ?? "__columnOutForDelivery" - columnIncoming = try container.decodeIfPresent(String.self, forKey: .columnIncoming) ?? "__columnIncoming" - allOrdersButton = try container.decodeIfPresent(String.self, forKey: .allOrdersButton) ?? "__allOrdersButton" - sectionToday = try container.decodeIfPresent(String.self, forKey: .sectionToday) ?? "__sectionToday" - sectionTomorrow = try container.decodeIfPresent(String.self, forKey: .sectionTomorrow) ?? "__sectionTomorrow" - sectionLater = try container.decodeIfPresent(String.self, forKey: .sectionLater) ?? "__sectionLater" - columnAccepted = try container.decodeIfPresent(String.self, forKey: .columnAccepted) ?? "__columnAccepted" - columnReady = try container.decodeIfPresent(String.self, forKey: .columnReady) ?? "__columnReady" - columnDoneToday = try container.decodeIfPresent(String.self, forKey: .columnDoneToday) ?? "__columnDoneToday" - itemsPlural = try container.decodeIfPresent(String.self, forKey: .itemsPlural) ?? "__itemsPlural" - itemsSingular = try container.decodeIfPresent(String.self, forKey: .itemsSingular) ?? "__itemsSingular" - columnDoneTodayEmpty = try container.decodeIfPresent(String.self, forKey: .columnDoneTodayEmpty) ?? "__columnDoneTodayEmpty" - columnOutForDeliveryEmpty = try container.decodeIfPresent(String.self, forKey: .columnOutForDeliveryEmpty) ?? "__columnOutForDeliveryEmpty" - columnReadyEmpty = try container.decodeIfPresent(String.self, forKey: .columnReadyEmpty) ?? "__columnReadyEmpty" + accepted = try container.decodeIfPresent(String.self, forKey: .accepted) ?? "__accepted" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.columnAcceptedEmpty.stringValue: return columnAcceptedEmpty - case CodingKeys.columnIncomingEmpty.stringValue: return columnIncomingEmpty - case CodingKeys.columnOutForDelivery.stringValue: return columnOutForDelivery - case CodingKeys.columnIncoming.stringValue: return columnIncoming - case CodingKeys.allOrdersButton.stringValue: return allOrdersButton - case CodingKeys.sectionToday.stringValue: return sectionToday - case CodingKeys.sectionTomorrow.stringValue: return sectionTomorrow - case CodingKeys.sectionLater.stringValue: return sectionLater - case CodingKeys.columnAccepted.stringValue: return columnAccepted - case CodingKeys.columnReady.stringValue: return columnReady - case CodingKeys.columnDoneToday.stringValue: return columnDoneToday - case CodingKeys.itemsPlural.stringValue: return itemsPlural - case CodingKeys.itemsSingular.stringValue: return itemsSingular - case CodingKeys.columnDoneTodayEmpty.stringValue: return columnDoneTodayEmpty - case CodingKeys.columnOutForDeliveryEmpty.stringValue: return columnOutForDeliveryEmpty - case CodingKeys.columnReadyEmpty.stringValue: return columnReadyEmpty + case CodingKeys.accepted.stringValue: return accepted default: return nil } } } - public final class SearchOrders: LocalizableSection { - public var statusNew = "" - public var statusRejected = "" - public var customerNameHeader = "" - public var orderDateHeader = "" - public var emptyMessage = "" - public var orderStatusHeader = "" - public var searchfieldPlaceholder = "" - public var statusReady = "" - public var statusCompleted = "" - public var orderNumberHeader = "" - public var title = "" - public var statusShipped = "" - public var statusAccepted = "" + public final class PrinterOutput: LocalizableSection { + public var errorNoDeviceFound = "" + public var includeCutlery = "" + public var otherHeader = "" + public var coldHeader = "" + public var orderNumber = "" + public var errorDeviceConnectionFailed = "" + public var noteHeader = "" + public var warmHeader = "" enum CodingKeys: String, CodingKey { - case statusNew - case statusRejected - case customerNameHeader - case orderDateHeader - case emptyMessage - case orderStatusHeader - case searchfieldPlaceholder - case statusReady - case statusCompleted - case orderNumberHeader - case title - case statusShipped - case statusAccepted + case errorNoDeviceFound + case includeCutlery + case otherHeader + case coldHeader + case orderNumber + case errorDeviceConnectionFailed + case noteHeader + case warmHeader } public override init() { super.init() } @@ -402,36 +328,26 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - statusNew = try container.decodeIfPresent(String.self, forKey: .statusNew) ?? "__statusNew" - statusRejected = try container.decodeIfPresent(String.self, forKey: .statusRejected) ?? "__statusRejected" - customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" - orderDateHeader = try container.decodeIfPresent(String.self, forKey: .orderDateHeader) ?? "__orderDateHeader" - emptyMessage = try container.decodeIfPresent(String.self, forKey: .emptyMessage) ?? "__emptyMessage" - orderStatusHeader = try container.decodeIfPresent(String.self, forKey: .orderStatusHeader) ?? "__orderStatusHeader" - searchfieldPlaceholder = try container.decodeIfPresent(String.self, forKey: .searchfieldPlaceholder) ?? "__searchfieldPlaceholder" - statusReady = try container.decodeIfPresent(String.self, forKey: .statusReady) ?? "__statusReady" - statusCompleted = try container.decodeIfPresent(String.self, forKey: .statusCompleted) ?? "__statusCompleted" - orderNumberHeader = try container.decodeIfPresent(String.self, forKey: .orderNumberHeader) ?? "__orderNumberHeader" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - statusShipped = try container.decodeIfPresent(String.self, forKey: .statusShipped) ?? "__statusShipped" - statusAccepted = try container.decodeIfPresent(String.self, forKey: .statusAccepted) ?? "__statusAccepted" + errorNoDeviceFound = try container.decodeIfPresent(String.self, forKey: .errorNoDeviceFound) ?? "__errorNoDeviceFound" + includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" + otherHeader = try container.decodeIfPresent(String.self, forKey: .otherHeader) ?? "__otherHeader" + coldHeader = try container.decodeIfPresent(String.self, forKey: .coldHeader) ?? "__coldHeader" + orderNumber = try container.decodeIfPresent(String.self, forKey: .orderNumber) ?? "__orderNumber" + errorDeviceConnectionFailed = try container.decodeIfPresent(String.self, forKey: .errorDeviceConnectionFailed) ?? "__errorDeviceConnectionFailed" + noteHeader = try container.decodeIfPresent(String.self, forKey: .noteHeader) ?? "__noteHeader" + warmHeader = try container.decodeIfPresent(String.self, forKey: .warmHeader) ?? "__warmHeader" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.statusNew.stringValue: return statusNew - case CodingKeys.statusRejected.stringValue: return statusRejected - case CodingKeys.customerNameHeader.stringValue: return customerNameHeader - case CodingKeys.orderDateHeader.stringValue: return orderDateHeader - case CodingKeys.emptyMessage.stringValue: return emptyMessage - case CodingKeys.orderStatusHeader.stringValue: return orderStatusHeader - case CodingKeys.searchfieldPlaceholder.stringValue: return searchfieldPlaceholder - case CodingKeys.statusReady.stringValue: return statusReady - case CodingKeys.statusCompleted.stringValue: return statusCompleted - case CodingKeys.orderNumberHeader.stringValue: return orderNumberHeader - case CodingKeys.title.stringValue: return title - case CodingKeys.statusShipped.stringValue: return statusShipped - case CodingKeys.statusAccepted.stringValue: return statusAccepted + case CodingKeys.errorNoDeviceFound.stringValue: return errorNoDeviceFound + case CodingKeys.includeCutlery.stringValue: return includeCutlery + case CodingKeys.otherHeader.stringValue: return otherHeader + case CodingKeys.coldHeader.stringValue: return coldHeader + case CodingKeys.orderNumber.stringValue: return orderNumber + case CodingKeys.errorDeviceConnectionFailed.stringValue: return errorDeviceConnectionFailed + case CodingKeys.noteHeader.stringValue: return noteHeader + case CodingKeys.warmHeader.stringValue: return warmHeader default: return nil } } @@ -439,17 +355,17 @@ public final class Localizations: LocalizableModel { public final class Error: LocalizableSection { public var errorTitle = "" + public var authenticationError = "" public var unknownError = "" - public var connectionError = "" public var serverError = "" - public var authenticationError = "" + public var connectionError = "" enum CodingKeys: String, CodingKey { case errorTitle + case authenticationError case unknownError - case connectionError case serverError - case authenticationError + case connectionError } public override init() { super.init() } @@ -458,47 +374,47 @@ public final class Localizations: LocalizableModel { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) errorTitle = try container.decodeIfPresent(String.self, forKey: .errorTitle) ?? "__errorTitle" + authenticationError = try container.decodeIfPresent(String.self, forKey: .authenticationError) ?? "__authenticationError" unknownError = try container.decodeIfPresent(String.self, forKey: .unknownError) ?? "__unknownError" - connectionError = try container.decodeIfPresent(String.self, forKey: .connectionError) ?? "__connectionError" serverError = try container.decodeIfPresent(String.self, forKey: .serverError) ?? "__serverError" - authenticationError = try container.decodeIfPresent(String.self, forKey: .authenticationError) ?? "__authenticationError" + connectionError = try container.decodeIfPresent(String.self, forKey: .connectionError) ?? "__connectionError" } public override subscript(key: String) -> String? { switch key { case CodingKeys.errorTitle.stringValue: return errorTitle + case CodingKeys.authenticationError.stringValue: return authenticationError case CodingKeys.unknownError.stringValue: return unknownError - case CodingKeys.connectionError.stringValue: return connectionError case CodingKeys.serverError.stringValue: return serverError - case CodingKeys.authenticationError.stringValue: return authenticationError + case CodingKeys.connectionError.stringValue: return connectionError default: return nil } } } - public final class Units: LocalizableSection { - public var dlt = "" - public var d70 = "" - public var mlt = "" - public var ltr = "" - public var e14 = "" - public var h87 = "" - public var kgm = "" - public var grm = "" - public var cmt = "" - public var clt = "" + public final class Login: LocalizableSection { + public var emailHeader = "" + public var resetPasswordMessage = "" + public var appName = "" + public var appVersionPrefix = "" + public var emailPlaceholder = "" + public var errorInvalidCredentials = "" + public var passwordPlaceholder = "" + public var loginButton = "" + public var passwordHeader = "" + public var title = "" enum CodingKeys: String, CodingKey { - case dlt - case d70 - case mlt - case ltr - case e14 - case h87 - case kgm - case grm - case cmt - case clt + case emailHeader + case resetPasswordMessage + case appName + case appVersionPrefix + case emailPlaceholder + case errorInvalidCredentials + case passwordPlaceholder + case loginButton + case passwordHeader + case title } public override init() { super.init() } @@ -506,30 +422,189 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - dlt = try container.decodeIfPresent(String.self, forKey: .dlt) ?? "__dlt" - d70 = try container.decodeIfPresent(String.self, forKey: .d70) ?? "__d70" - mlt = try container.decodeIfPresent(String.self, forKey: .mlt) ?? "__mlt" - ltr = try container.decodeIfPresent(String.self, forKey: .ltr) ?? "__ltr" - e14 = try container.decodeIfPresent(String.self, forKey: .e14) ?? "__e14" - h87 = try container.decodeIfPresent(String.self, forKey: .h87) ?? "__h87" - kgm = try container.decodeIfPresent(String.self, forKey: .kgm) ?? "__kgm" - grm = try container.decodeIfPresent(String.self, forKey: .grm) ?? "__grm" - cmt = try container.decodeIfPresent(String.self, forKey: .cmt) ?? "__cmt" - clt = try container.decodeIfPresent(String.self, forKey: .clt) ?? "__clt" + emailHeader = try container.decodeIfPresent(String.self, forKey: .emailHeader) ?? "__emailHeader" + resetPasswordMessage = try container.decodeIfPresent(String.self, forKey: .resetPasswordMessage) ?? "__resetPasswordMessage" + appName = try container.decodeIfPresent(String.self, forKey: .appName) ?? "__appName" + appVersionPrefix = try container.decodeIfPresent(String.self, forKey: .appVersionPrefix) ?? "__appVersionPrefix" + emailPlaceholder = try container.decodeIfPresent(String.self, forKey: .emailPlaceholder) ?? "__emailPlaceholder" + errorInvalidCredentials = try container.decodeIfPresent(String.self, forKey: .errorInvalidCredentials) ?? "__errorInvalidCredentials" + passwordPlaceholder = try container.decodeIfPresent(String.self, forKey: .passwordPlaceholder) ?? "__passwordPlaceholder" + loginButton = try container.decodeIfPresent(String.self, forKey: .loginButton) ?? "__loginButton" + passwordHeader = try container.decodeIfPresent(String.self, forKey: .passwordHeader) ?? "__passwordHeader" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.dlt.stringValue: return dlt - case CodingKeys.d70.stringValue: return d70 - case CodingKeys.mlt.stringValue: return mlt - case CodingKeys.ltr.stringValue: return ltr - case CodingKeys.e14.stringValue: return e14 - case CodingKeys.h87.stringValue: return h87 - case CodingKeys.kgm.stringValue: return kgm - case CodingKeys.grm.stringValue: return grm - case CodingKeys.cmt.stringValue: return cmt - case CodingKeys.clt.stringValue: return clt + case CodingKeys.emailHeader.stringValue: return emailHeader + case CodingKeys.resetPasswordMessage.stringValue: return resetPasswordMessage + case CodingKeys.appName.stringValue: return appName + case CodingKeys.appVersionPrefix.stringValue: return appVersionPrefix + case CodingKeys.emailPlaceholder.stringValue: return emailPlaceholder + case CodingKeys.errorInvalidCredentials.stringValue: return errorInvalidCredentials + case CodingKeys.passwordPlaceholder.stringValue: return passwordPlaceholder + case CodingKeys.loginButton.stringValue: return loginButton + case CodingKeys.passwordHeader.stringValue: return passwordHeader + case CodingKeys.title.stringValue: return title + default: return nil + } + } + } + + public final class OrderDetails: LocalizableSection { + public var completedBanner = "" + public var infoOrderTime = "" + public var errorCouldNotFetchProducts = "" + public var deliveryTypeHeader = "" + public var rejectOrderAlertConfirm = "" + public var sectionHeaderTakeout = "" + public var infoAddress = "" + public var readyButton = "" + public var includeCutlery = "" + public var infoTakeoutPhone = "" + public var underPreparationButton = "" + public var rejectOrderAlertTitle = "" + public var sectionHeaderColdProducts = "" + public var infoDeliveryTime = "" + public var infoPaymentType = "" + public var outForDeliveryButton = "" + public var rejectButton = "" + public var today = "" + public var sectionHeaderCustomerInfo = "" + public var infoCustomerName = "" + public var sectionSubheaderColdProducts = "" + public var aPiece = "" + public var customerNoteHeader = "" + public var infoMobilePhone = "" + public var sectionHeaderWarmProducts = "" + public var infoTakeOutShopID = "" + public var sectionHeaderOrderStatus = "" + public var pickedUpButton = "" + public var errorStatusUpdateFailed = "" + public var rejectOrderAlertCancel = "" + public var rejectOrderAlertMessage = "" + public var sectionHeaderOtherProducts = "" + public var pickupTimeHeader = "" + public var printButton = "" + public var infoEmail = "" + + enum CodingKeys: String, CodingKey { + case completedBanner + case infoOrderTime + case errorCouldNotFetchProducts + case deliveryTypeHeader + case rejectOrderAlertConfirm + case sectionHeaderTakeout + case infoAddress + case readyButton + case includeCutlery + case infoTakeoutPhone + case underPreparationButton + case rejectOrderAlertTitle + case sectionHeaderColdProducts + case infoDeliveryTime + case infoPaymentType + case outForDeliveryButton + case rejectButton + case today + case sectionHeaderCustomerInfo + case infoCustomerName + case sectionSubheaderColdProducts + case aPiece + case customerNoteHeader + case infoMobilePhone + case sectionHeaderWarmProducts + case infoTakeOutShopID + case sectionHeaderOrderStatus + case pickedUpButton + case errorStatusUpdateFailed + case rejectOrderAlertCancel + case rejectOrderAlertMessage + case sectionHeaderOtherProducts + case pickupTimeHeader + case printButton + case infoEmail + } + + public override init() { super.init() } + + public required init(from decoder: Decoder) throws { + super.init() + let container = try decoder.container(keyedBy: CodingKeys.self) + completedBanner = try container.decodeIfPresent(String.self, forKey: .completedBanner) ?? "__completedBanner" + infoOrderTime = try container.decodeIfPresent(String.self, forKey: .infoOrderTime) ?? "__infoOrderTime" + errorCouldNotFetchProducts = try container.decodeIfPresent(String.self, forKey: .errorCouldNotFetchProducts) ?? "__errorCouldNotFetchProducts" + deliveryTypeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTypeHeader) ?? "__deliveryTypeHeader" + rejectOrderAlertConfirm = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertConfirm) ?? "__rejectOrderAlertConfirm" + sectionHeaderTakeout = try container.decodeIfPresent(String.self, forKey: .sectionHeaderTakeout) ?? "__sectionHeaderTakeout" + infoAddress = try container.decodeIfPresent(String.self, forKey: .infoAddress) ?? "__infoAddress" + readyButton = try container.decodeIfPresent(String.self, forKey: .readyButton) ?? "__readyButton" + includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" + infoTakeoutPhone = try container.decodeIfPresent(String.self, forKey: .infoTakeoutPhone) ?? "__infoTakeoutPhone" + underPreparationButton = try container.decodeIfPresent(String.self, forKey: .underPreparationButton) ?? "__underPreparationButton" + rejectOrderAlertTitle = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertTitle) ?? "__rejectOrderAlertTitle" + sectionHeaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderColdProducts) ?? "__sectionHeaderColdProducts" + infoDeliveryTime = try container.decodeIfPresent(String.self, forKey: .infoDeliveryTime) ?? "__infoDeliveryTime" + infoPaymentType = try container.decodeIfPresent(String.self, forKey: .infoPaymentType) ?? "__infoPaymentType" + outForDeliveryButton = try container.decodeIfPresent(String.self, forKey: .outForDeliveryButton) ?? "__outForDeliveryButton" + rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" + today = try container.decodeIfPresent(String.self, forKey: .today) ?? "__today" + sectionHeaderCustomerInfo = try container.decodeIfPresent(String.self, forKey: .sectionHeaderCustomerInfo) ?? "__sectionHeaderCustomerInfo" + infoCustomerName = try container.decodeIfPresent(String.self, forKey: .infoCustomerName) ?? "__infoCustomerName" + sectionSubheaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionSubheaderColdProducts) ?? "__sectionSubheaderColdProducts" + aPiece = try container.decodeIfPresent(String.self, forKey: .aPiece) ?? "__aPiece" + customerNoteHeader = try container.decodeIfPresent(String.self, forKey: .customerNoteHeader) ?? "__customerNoteHeader" + infoMobilePhone = try container.decodeIfPresent(String.self, forKey: .infoMobilePhone) ?? "__infoMobilePhone" + sectionHeaderWarmProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderWarmProducts) ?? "__sectionHeaderWarmProducts" + infoTakeOutShopID = try container.decodeIfPresent(String.self, forKey: .infoTakeOutShopID) ?? "__infoTakeOutShopID" + sectionHeaderOrderStatus = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOrderStatus) ?? "__sectionHeaderOrderStatus" + pickedUpButton = try container.decodeIfPresent(String.self, forKey: .pickedUpButton) ?? "__pickedUpButton" + errorStatusUpdateFailed = try container.decodeIfPresent(String.self, forKey: .errorStatusUpdateFailed) ?? "__errorStatusUpdateFailed" + rejectOrderAlertCancel = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertCancel) ?? "__rejectOrderAlertCancel" + rejectOrderAlertMessage = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertMessage) ?? "__rejectOrderAlertMessage" + sectionHeaderOtherProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOtherProducts) ?? "__sectionHeaderOtherProducts" + pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" + printButton = try container.decodeIfPresent(String.self, forKey: .printButton) ?? "__printButton" + infoEmail = try container.decodeIfPresent(String.self, forKey: .infoEmail) ?? "__infoEmail" + } + + public override subscript(key: String) -> String? { + switch key { + case CodingKeys.completedBanner.stringValue: return completedBanner + case CodingKeys.infoOrderTime.stringValue: return infoOrderTime + case CodingKeys.errorCouldNotFetchProducts.stringValue: return errorCouldNotFetchProducts + case CodingKeys.deliveryTypeHeader.stringValue: return deliveryTypeHeader + case CodingKeys.rejectOrderAlertConfirm.stringValue: return rejectOrderAlertConfirm + case CodingKeys.sectionHeaderTakeout.stringValue: return sectionHeaderTakeout + case CodingKeys.infoAddress.stringValue: return infoAddress + case CodingKeys.readyButton.stringValue: return readyButton + case CodingKeys.includeCutlery.stringValue: return includeCutlery + case CodingKeys.infoTakeoutPhone.stringValue: return infoTakeoutPhone + case CodingKeys.underPreparationButton.stringValue: return underPreparationButton + case CodingKeys.rejectOrderAlertTitle.stringValue: return rejectOrderAlertTitle + case CodingKeys.sectionHeaderColdProducts.stringValue: return sectionHeaderColdProducts + case CodingKeys.infoDeliveryTime.stringValue: return infoDeliveryTime + case CodingKeys.infoPaymentType.stringValue: return infoPaymentType + case CodingKeys.outForDeliveryButton.stringValue: return outForDeliveryButton + case CodingKeys.rejectButton.stringValue: return rejectButton + case CodingKeys.today.stringValue: return today + case CodingKeys.sectionHeaderCustomerInfo.stringValue: return sectionHeaderCustomerInfo + case CodingKeys.infoCustomerName.stringValue: return infoCustomerName + case CodingKeys.sectionSubheaderColdProducts.stringValue: return sectionSubheaderColdProducts + case CodingKeys.aPiece.stringValue: return aPiece + case CodingKeys.customerNoteHeader.stringValue: return customerNoteHeader + case CodingKeys.infoMobilePhone.stringValue: return infoMobilePhone + case CodingKeys.sectionHeaderWarmProducts.stringValue: return sectionHeaderWarmProducts + case CodingKeys.infoTakeOutShopID.stringValue: return infoTakeOutShopID + case CodingKeys.sectionHeaderOrderStatus.stringValue: return sectionHeaderOrderStatus + case CodingKeys.pickedUpButton.stringValue: return pickedUpButton + case CodingKeys.errorStatusUpdateFailed.stringValue: return errorStatusUpdateFailed + case CodingKeys.rejectOrderAlertCancel.stringValue: return rejectOrderAlertCancel + case CodingKeys.rejectOrderAlertMessage.stringValue: return rejectOrderAlertMessage + case CodingKeys.sectionHeaderOtherProducts.stringValue: return sectionHeaderOtherProducts + case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader + case CodingKeys.printButton.stringValue: return printButton + case CodingKeys.infoEmail.stringValue: return infoEmail default: return nil } } @@ -563,29 +638,29 @@ public final class Localizations: LocalizableModel { } public final class Settings: LocalizableSection { - public var selectPrinterButton = "" - public var closeButton = "" public var printerHeader = "" - public var logOutAlertConfirm = "" + public var logOutAlertMessage = "" + public var selectPrinterButton = "" public var logOutAlertCancel = "" - public var logOutButton = "" public var usernameHeader = "" + public var logOutButton = "" public var appVersionHeader = "" public var logoutAlertTitle = "" - public var logOutAlertMessage = "" + public var logOutAlertConfirm = "" + public var closeButton = "" public var title = "" enum CodingKeys: String, CodingKey { - case selectPrinterButton - case closeButton case printerHeader - case logOutAlertConfirm + case logOutAlertMessage + case selectPrinterButton case logOutAlertCancel - case logOutButton case usernameHeader + case logOutButton case appVersionHeader case logoutAlertTitle - case logOutAlertMessage + case logOutAlertConfirm + case closeButton case title } @@ -594,217 +669,66 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - selectPrinterButton = try container.decodeIfPresent(String.self, forKey: .selectPrinterButton) ?? "__selectPrinterButton" - closeButton = try container.decodeIfPresent(String.self, forKey: .closeButton) ?? "__closeButton" printerHeader = try container.decodeIfPresent(String.self, forKey: .printerHeader) ?? "__printerHeader" - logOutAlertConfirm = try container.decodeIfPresent(String.self, forKey: .logOutAlertConfirm) ?? "__logOutAlertConfirm" + logOutAlertMessage = try container.decodeIfPresent(String.self, forKey: .logOutAlertMessage) ?? "__logOutAlertMessage" + selectPrinterButton = try container.decodeIfPresent(String.self, forKey: .selectPrinterButton) ?? "__selectPrinterButton" logOutAlertCancel = try container.decodeIfPresent(String.self, forKey: .logOutAlertCancel) ?? "__logOutAlertCancel" - logOutButton = try container.decodeIfPresent(String.self, forKey: .logOutButton) ?? "__logOutButton" usernameHeader = try container.decodeIfPresent(String.self, forKey: .usernameHeader) ?? "__usernameHeader" + logOutButton = try container.decodeIfPresent(String.self, forKey: .logOutButton) ?? "__logOutButton" appVersionHeader = try container.decodeIfPresent(String.self, forKey: .appVersionHeader) ?? "__appVersionHeader" logoutAlertTitle = try container.decodeIfPresent(String.self, forKey: .logoutAlertTitle) ?? "__logoutAlertTitle" - logOutAlertMessage = try container.decodeIfPresent(String.self, forKey: .logOutAlertMessage) ?? "__logOutAlertMessage" + logOutAlertConfirm = try container.decodeIfPresent(String.self, forKey: .logOutAlertConfirm) ?? "__logOutAlertConfirm" + closeButton = try container.decodeIfPresent(String.self, forKey: .closeButton) ?? "__closeButton" title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.selectPrinterButton.stringValue: return selectPrinterButton - case CodingKeys.closeButton.stringValue: return closeButton case CodingKeys.printerHeader.stringValue: return printerHeader - case CodingKeys.logOutAlertConfirm.stringValue: return logOutAlertConfirm + case CodingKeys.logOutAlertMessage.stringValue: return logOutAlertMessage + case CodingKeys.selectPrinterButton.stringValue: return selectPrinterButton case CodingKeys.logOutAlertCancel.stringValue: return logOutAlertCancel - case CodingKeys.logOutButton.stringValue: return logOutButton case CodingKeys.usernameHeader.stringValue: return usernameHeader + case CodingKeys.logOutButton.stringValue: return logOutButton case CodingKeys.appVersionHeader.stringValue: return appVersionHeader case CodingKeys.logoutAlertTitle.stringValue: return logoutAlertTitle - case CodingKeys.logOutAlertMessage.stringValue: return logOutAlertMessage + case CodingKeys.logOutAlertConfirm.stringValue: return logOutAlertConfirm + case CodingKeys.closeButton.stringValue: return closeButton case CodingKeys.title.stringValue: return title default: return nil } } } - public final class OrderDetails: LocalizableSection { - public var pickupTimeHeader = "" - public var customerNoteHeader = "" - public var aPiece = "" - public var rejectOrderAlertCancel = "" - public var infoAddress = "" - public var rejectOrderAlertTitle = "" - public var sectionHeaderWarmProducts = "" - public var infoEmail = "" - public var infoTakeOutShopID = "" - public var outForDeliveryButton = "" - public var deliveryTypeHeader = "" - public var includeCutlery = "" - public var errorCouldNotFetchProducts = "" - public var infoMobilePhone = "" - public var sectionHeaderOtherProducts = "" - public var underPreparationButton = "" - public var infoOrderTime = "" - public var sectionHeaderColdProducts = "" - public var sectionSubheaderColdProducts = "" - public var rejectOrderAlertConfirm = "" - public var rejectOrderAlertMessage = "" - public var sectionHeaderOrderStatus = "" - public var completedBanner = "" - public var errorStatusUpdateFailed = "" - public var printButton = "" - public var infoTakeoutPhone = "" - public var today = "" - public var readyButton = "" - public var sectionHeaderCustomerInfo = "" - public var pickedUpButton = "" - public var sectionHeaderTakeout = "" - public var rejectButton = "" - public var infoPaymentType = "" - public var infoDeliveryTime = "" - public var infoCustomerName = "" - - enum CodingKeys: String, CodingKey { - case pickupTimeHeader - case customerNoteHeader - case aPiece - case rejectOrderAlertCancel - case infoAddress - case rejectOrderAlertTitle - case sectionHeaderWarmProducts - case infoEmail - case infoTakeOutShopID - case outForDeliveryButton - case deliveryTypeHeader - case includeCutlery - case errorCouldNotFetchProducts - case infoMobilePhone - case sectionHeaderOtherProducts - case underPreparationButton - case infoOrderTime - case sectionHeaderColdProducts - case sectionSubheaderColdProducts - case rejectOrderAlertConfirm - case rejectOrderAlertMessage - case sectionHeaderOrderStatus - case completedBanner - case errorStatusUpdateFailed - case printButton - case infoTakeoutPhone - case today - case readyButton - case sectionHeaderCustomerInfo - case pickedUpButton - case sectionHeaderTakeout - case rejectButton - case infoPaymentType - case infoDeliveryTime - case infoCustomerName - } - - public override init() { super.init() } - - public required init(from decoder: Decoder) throws { - super.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" - customerNoteHeader = try container.decodeIfPresent(String.self, forKey: .customerNoteHeader) ?? "__customerNoteHeader" - aPiece = try container.decodeIfPresent(String.self, forKey: .aPiece) ?? "__aPiece" - rejectOrderAlertCancel = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertCancel) ?? "__rejectOrderAlertCancel" - infoAddress = try container.decodeIfPresent(String.self, forKey: .infoAddress) ?? "__infoAddress" - rejectOrderAlertTitle = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertTitle) ?? "__rejectOrderAlertTitle" - sectionHeaderWarmProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderWarmProducts) ?? "__sectionHeaderWarmProducts" - infoEmail = try container.decodeIfPresent(String.self, forKey: .infoEmail) ?? "__infoEmail" - infoTakeOutShopID = try container.decodeIfPresent(String.self, forKey: .infoTakeOutShopID) ?? "__infoTakeOutShopID" - outForDeliveryButton = try container.decodeIfPresent(String.self, forKey: .outForDeliveryButton) ?? "__outForDeliveryButton" - deliveryTypeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTypeHeader) ?? "__deliveryTypeHeader" - includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" - errorCouldNotFetchProducts = try container.decodeIfPresent(String.self, forKey: .errorCouldNotFetchProducts) ?? "__errorCouldNotFetchProducts" - infoMobilePhone = try container.decodeIfPresent(String.self, forKey: .infoMobilePhone) ?? "__infoMobilePhone" - sectionHeaderOtherProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOtherProducts) ?? "__sectionHeaderOtherProducts" - underPreparationButton = try container.decodeIfPresent(String.self, forKey: .underPreparationButton) ?? "__underPreparationButton" - infoOrderTime = try container.decodeIfPresent(String.self, forKey: .infoOrderTime) ?? "__infoOrderTime" - sectionHeaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderColdProducts) ?? "__sectionHeaderColdProducts" - sectionSubheaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionSubheaderColdProducts) ?? "__sectionSubheaderColdProducts" - rejectOrderAlertConfirm = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertConfirm) ?? "__rejectOrderAlertConfirm" - rejectOrderAlertMessage = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertMessage) ?? "__rejectOrderAlertMessage" - sectionHeaderOrderStatus = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOrderStatus) ?? "__sectionHeaderOrderStatus" - completedBanner = try container.decodeIfPresent(String.self, forKey: .completedBanner) ?? "__completedBanner" - errorStatusUpdateFailed = try container.decodeIfPresent(String.self, forKey: .errorStatusUpdateFailed) ?? "__errorStatusUpdateFailed" - printButton = try container.decodeIfPresent(String.self, forKey: .printButton) ?? "__printButton" - infoTakeoutPhone = try container.decodeIfPresent(String.self, forKey: .infoTakeoutPhone) ?? "__infoTakeoutPhone" - today = try container.decodeIfPresent(String.self, forKey: .today) ?? "__today" - readyButton = try container.decodeIfPresent(String.self, forKey: .readyButton) ?? "__readyButton" - sectionHeaderCustomerInfo = try container.decodeIfPresent(String.self, forKey: .sectionHeaderCustomerInfo) ?? "__sectionHeaderCustomerInfo" - pickedUpButton = try container.decodeIfPresent(String.self, forKey: .pickedUpButton) ?? "__pickedUpButton" - sectionHeaderTakeout = try container.decodeIfPresent(String.self, forKey: .sectionHeaderTakeout) ?? "__sectionHeaderTakeout" - rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" - infoPaymentType = try container.decodeIfPresent(String.self, forKey: .infoPaymentType) ?? "__infoPaymentType" - infoDeliveryTime = try container.decodeIfPresent(String.self, forKey: .infoDeliveryTime) ?? "__infoDeliveryTime" - infoCustomerName = try container.decodeIfPresent(String.self, forKey: .infoCustomerName) ?? "__infoCustomerName" - } - - public override subscript(key: String) -> String? { - switch key { - case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader - case CodingKeys.customerNoteHeader.stringValue: return customerNoteHeader - case CodingKeys.aPiece.stringValue: return aPiece - case CodingKeys.rejectOrderAlertCancel.stringValue: return rejectOrderAlertCancel - case CodingKeys.infoAddress.stringValue: return infoAddress - case CodingKeys.rejectOrderAlertTitle.stringValue: return rejectOrderAlertTitle - case CodingKeys.sectionHeaderWarmProducts.stringValue: return sectionHeaderWarmProducts - case CodingKeys.infoEmail.stringValue: return infoEmail - case CodingKeys.infoTakeOutShopID.stringValue: return infoTakeOutShopID - case CodingKeys.outForDeliveryButton.stringValue: return outForDeliveryButton - case CodingKeys.deliveryTypeHeader.stringValue: return deliveryTypeHeader - case CodingKeys.includeCutlery.stringValue: return includeCutlery - case CodingKeys.errorCouldNotFetchProducts.stringValue: return errorCouldNotFetchProducts - case CodingKeys.infoMobilePhone.stringValue: return infoMobilePhone - case CodingKeys.sectionHeaderOtherProducts.stringValue: return sectionHeaderOtherProducts - case CodingKeys.underPreparationButton.stringValue: return underPreparationButton - case CodingKeys.infoOrderTime.stringValue: return infoOrderTime - case CodingKeys.sectionHeaderColdProducts.stringValue: return sectionHeaderColdProducts - case CodingKeys.sectionSubheaderColdProducts.stringValue: return sectionSubheaderColdProducts - case CodingKeys.rejectOrderAlertConfirm.stringValue: return rejectOrderAlertConfirm - case CodingKeys.rejectOrderAlertMessage.stringValue: return rejectOrderAlertMessage - case CodingKeys.sectionHeaderOrderStatus.stringValue: return sectionHeaderOrderStatus - case CodingKeys.completedBanner.stringValue: return completedBanner - case CodingKeys.errorStatusUpdateFailed.stringValue: return errorStatusUpdateFailed - case CodingKeys.printButton.stringValue: return printButton - case CodingKeys.infoTakeoutPhone.stringValue: return infoTakeoutPhone - case CodingKeys.today.stringValue: return today - case CodingKeys.readyButton.stringValue: return readyButton - case CodingKeys.sectionHeaderCustomerInfo.stringValue: return sectionHeaderCustomerInfo - case CodingKeys.pickedUpButton.stringValue: return pickedUpButton - case CodingKeys.sectionHeaderTakeout.stringValue: return sectionHeaderTakeout - case CodingKeys.rejectButton.stringValue: return rejectButton - case CodingKeys.infoPaymentType.stringValue: return infoPaymentType - case CodingKeys.infoDeliveryTime.stringValue: return infoDeliveryTime - case CodingKeys.infoCustomerName.stringValue: return infoCustomerName - default: return nil - } - } - } - - public final class OrderDetailNewOrderSection: LocalizableSection { - public var subheader = "" - public var phoneNumberHeader = "" - public var customerNameHeader = "" - public var acceptButton = "" - public var rejectButton = "" - public var deliveryTimeHeader = "" - public var header = "" - public var pickupTimeHeader = "" - public var pickedUpInStoreAt = "" + public final class DefaultSection: LocalizableSection { + public var back = "" + public var next = "" + public var yes = "" + public var no = "" + public var cancel = "" + public var ok = "" + public var later = "" + public var edit = "" + public var skip = "" + public var previous = "" + public var settings = "" + public var retry = "" + public var save = "" enum CodingKeys: String, CodingKey { - case subheader - case phoneNumberHeader - case customerNameHeader - case acceptButton - case rejectButton - case deliveryTimeHeader - case header - case pickupTimeHeader - case pickedUpInStoreAt + case back + case next + case yes + case no + case cancel + case ok + case later + case edit + case skip + case previous + case settings + case retry + case save } public override init() { super.init() } @@ -812,52 +736,76 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - subheader = try container.decodeIfPresent(String.self, forKey: .subheader) ?? "__subheader" - phoneNumberHeader = try container.decodeIfPresent(String.self, forKey: .phoneNumberHeader) ?? "__phoneNumberHeader" - customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" - acceptButton = try container.decodeIfPresent(String.self, forKey: .acceptButton) ?? "__acceptButton" - rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" - deliveryTimeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTimeHeader) ?? "__deliveryTimeHeader" - header = try container.decodeIfPresent(String.self, forKey: .header) ?? "__header" - pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" - pickedUpInStoreAt = try container.decodeIfPresent(String.self, forKey: .pickedUpInStoreAt) ?? "__pickedUpInStoreAt" + back = try container.decodeIfPresent(String.self, forKey: .back) ?? "__back" + next = try container.decodeIfPresent(String.self, forKey: .next) ?? "__next" + yes = try container.decodeIfPresent(String.self, forKey: .yes) ?? "__yes" + no = try container.decodeIfPresent(String.self, forKey: .no) ?? "__no" + cancel = try container.decodeIfPresent(String.self, forKey: .cancel) ?? "__cancel" + ok = try container.decodeIfPresent(String.self, forKey: .ok) ?? "__ok" + later = try container.decodeIfPresent(String.self, forKey: .later) ?? "__later" + edit = try container.decodeIfPresent(String.self, forKey: .edit) ?? "__edit" + skip = try container.decodeIfPresent(String.self, forKey: .skip) ?? "__skip" + previous = try container.decodeIfPresent(String.self, forKey: .previous) ?? "__previous" + settings = try container.decodeIfPresent(String.self, forKey: .settings) ?? "__settings" + retry = try container.decodeIfPresent(String.self, forKey: .retry) ?? "__retry" + save = try container.decodeIfPresent(String.self, forKey: .save) ?? "__save" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.subheader.stringValue: return subheader - case CodingKeys.phoneNumberHeader.stringValue: return phoneNumberHeader - case CodingKeys.customerNameHeader.stringValue: return customerNameHeader - case CodingKeys.acceptButton.stringValue: return acceptButton - case CodingKeys.rejectButton.stringValue: return rejectButton - case CodingKeys.deliveryTimeHeader.stringValue: return deliveryTimeHeader - case CodingKeys.header.stringValue: return header - case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader - case CodingKeys.pickedUpInStoreAt.stringValue: return pickedUpInStoreAt + case CodingKeys.back.stringValue: return back + case CodingKeys.next.stringValue: return next + case CodingKeys.yes.stringValue: return yes + case CodingKeys.no.stringValue: return no + case CodingKeys.cancel.stringValue: return cancel + case CodingKeys.ok.stringValue: return ok + case CodingKeys.later.stringValue: return later + case CodingKeys.edit.stringValue: return edit + case CodingKeys.skip.stringValue: return skip + case CodingKeys.previous.stringValue: return previous + case CodingKeys.settings.stringValue: return settings + case CodingKeys.retry.stringValue: return retry + case CodingKeys.save.stringValue: return save default: return nil } } } - public final class PrinterOutput: LocalizableSection { - public var orderNumber = "" - public var coldHeader = "" - public var otherHeader = "" - public var errorDeviceConnectionFailed = "" - public var noteHeader = "" - public var warmHeader = "" - public var includeCutlery = "" - public var errorNoDeviceFound = "" + public final class Dashboard: LocalizableSection { + public var allOrdersButton = "" + public var sectionLater = "" + public var columnAccepted = "" + public var sectionToday = "" + public var columnAcceptedEmpty = "" + public var itemsPlural = "" + public var columnDoneToday = "" + public var columnReadyEmpty = "" + public var sectionTomorrow = "" + public var columnDoneTodayEmpty = "" + public var columnIncomingEmpty = "" + public var columnOutForDelivery = "" + public var columnReady = "" + public var columnOutForDeliveryEmpty = "" + public var columnIncoming = "" + public var itemsSingular = "" enum CodingKeys: String, CodingKey { - case orderNumber - case coldHeader - case otherHeader - case errorDeviceConnectionFailed - case noteHeader - case warmHeader - case includeCutlery - case errorNoDeviceFound + case allOrdersButton + case sectionLater + case columnAccepted + case sectionToday + case columnAcceptedEmpty + case itemsPlural + case columnDoneToday + case columnReadyEmpty + case sectionTomorrow + case columnDoneTodayEmpty + case columnIncomingEmpty + case columnOutForDelivery + case columnReady + case columnOutForDeliveryEmpty + case columnIncoming + case itemsSingular } public override init() { super.init() } @@ -865,36 +813,70 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - orderNumber = try container.decodeIfPresent(String.self, forKey: .orderNumber) ?? "__orderNumber" - coldHeader = try container.decodeIfPresent(String.self, forKey: .coldHeader) ?? "__coldHeader" - otherHeader = try container.decodeIfPresent(String.self, forKey: .otherHeader) ?? "__otherHeader" - errorDeviceConnectionFailed = try container.decodeIfPresent(String.self, forKey: .errorDeviceConnectionFailed) ?? "__errorDeviceConnectionFailed" - noteHeader = try container.decodeIfPresent(String.self, forKey: .noteHeader) ?? "__noteHeader" - warmHeader = try container.decodeIfPresent(String.self, forKey: .warmHeader) ?? "__warmHeader" - includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" - errorNoDeviceFound = try container.decodeIfPresent(String.self, forKey: .errorNoDeviceFound) ?? "__errorNoDeviceFound" + allOrdersButton = try container.decodeIfPresent(String.self, forKey: .allOrdersButton) ?? "__allOrdersButton" + sectionLater = try container.decodeIfPresent(String.self, forKey: .sectionLater) ?? "__sectionLater" + columnAccepted = try container.decodeIfPresent(String.self, forKey: .columnAccepted) ?? "__columnAccepted" + sectionToday = try container.decodeIfPresent(String.self, forKey: .sectionToday) ?? "__sectionToday" + columnAcceptedEmpty = try container.decodeIfPresent(String.self, forKey: .columnAcceptedEmpty) ?? "__columnAcceptedEmpty" + itemsPlural = try container.decodeIfPresent(String.self, forKey: .itemsPlural) ?? "__itemsPlural" + columnDoneToday = try container.decodeIfPresent(String.self, forKey: .columnDoneToday) ?? "__columnDoneToday" + columnReadyEmpty = try container.decodeIfPresent(String.self, forKey: .columnReadyEmpty) ?? "__columnReadyEmpty" + sectionTomorrow = try container.decodeIfPresent(String.self, forKey: .sectionTomorrow) ?? "__sectionTomorrow" + columnDoneTodayEmpty = try container.decodeIfPresent(String.self, forKey: .columnDoneTodayEmpty) ?? "__columnDoneTodayEmpty" + columnIncomingEmpty = try container.decodeIfPresent(String.self, forKey: .columnIncomingEmpty) ?? "__columnIncomingEmpty" + columnOutForDelivery = try container.decodeIfPresent(String.self, forKey: .columnOutForDelivery) ?? "__columnOutForDelivery" + columnReady = try container.decodeIfPresent(String.self, forKey: .columnReady) ?? "__columnReady" + columnOutForDeliveryEmpty = try container.decodeIfPresent(String.self, forKey: .columnOutForDeliveryEmpty) ?? "__columnOutForDeliveryEmpty" + columnIncoming = try container.decodeIfPresent(String.self, forKey: .columnIncoming) ?? "__columnIncoming" + itemsSingular = try container.decodeIfPresent(String.self, forKey: .itemsSingular) ?? "__itemsSingular" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.orderNumber.stringValue: return orderNumber - case CodingKeys.coldHeader.stringValue: return coldHeader - case CodingKeys.otherHeader.stringValue: return otherHeader - case CodingKeys.errorDeviceConnectionFailed.stringValue: return errorDeviceConnectionFailed - case CodingKeys.noteHeader.stringValue: return noteHeader - case CodingKeys.warmHeader.stringValue: return warmHeader - case CodingKeys.includeCutlery.stringValue: return includeCutlery - case CodingKeys.errorNoDeviceFound.stringValue: return errorNoDeviceFound + case CodingKeys.allOrdersButton.stringValue: return allOrdersButton + case CodingKeys.sectionLater.stringValue: return sectionLater + case CodingKeys.columnAccepted.stringValue: return columnAccepted + case CodingKeys.sectionToday.stringValue: return sectionToday + case CodingKeys.columnAcceptedEmpty.stringValue: return columnAcceptedEmpty + case CodingKeys.itemsPlural.stringValue: return itemsPlural + case CodingKeys.columnDoneToday.stringValue: return columnDoneToday + case CodingKeys.columnReadyEmpty.stringValue: return columnReadyEmpty + case CodingKeys.sectionTomorrow.stringValue: return sectionTomorrow + case CodingKeys.columnDoneTodayEmpty.stringValue: return columnDoneTodayEmpty + case CodingKeys.columnIncomingEmpty.stringValue: return columnIncomingEmpty + case CodingKeys.columnOutForDelivery.stringValue: return columnOutForDelivery + case CodingKeys.columnReady.stringValue: return columnReady + case CodingKeys.columnOutForDeliveryEmpty.stringValue: return columnOutForDeliveryEmpty + case CodingKeys.columnIncoming.stringValue: return columnIncoming + case CodingKeys.itemsSingular.stringValue: return itemsSingular default: return nil } } } - public final class OrderStatus: LocalizableSection { - public var accepted = "" + public final class Units: LocalizableSection { + public var grm = "" + public var ltr = "" + public var h87 = "" + public var e14 = "" + public var kgm = "" + public var d70 = "" + public var mlt = "" + public var dlt = "" + public var cmt = "" + public var clt = "" enum CodingKeys: String, CodingKey { - case accepted + case grm + case ltr + case h87 + case e14 + case kgm + case d70 + case mlt + case dlt + case cmt + case clt } public override init() { super.init() } @@ -902,12 +884,30 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - accepted = try container.decodeIfPresent(String.self, forKey: .accepted) ?? "__accepted" + grm = try container.decodeIfPresent(String.self, forKey: .grm) ?? "__grm" + ltr = try container.decodeIfPresent(String.self, forKey: .ltr) ?? "__ltr" + h87 = try container.decodeIfPresent(String.self, forKey: .h87) ?? "__h87" + e14 = try container.decodeIfPresent(String.self, forKey: .e14) ?? "__e14" + kgm = try container.decodeIfPresent(String.self, forKey: .kgm) ?? "__kgm" + d70 = try container.decodeIfPresent(String.self, forKey: .d70) ?? "__d70" + mlt = try container.decodeIfPresent(String.self, forKey: .mlt) ?? "__mlt" + dlt = try container.decodeIfPresent(String.self, forKey: .dlt) ?? "__dlt" + cmt = try container.decodeIfPresent(String.self, forKey: .cmt) ?? "__cmt" + clt = try container.decodeIfPresent(String.self, forKey: .clt) ?? "__clt" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.accepted.stringValue: return accepted + case CodingKeys.grm.stringValue: return grm + case CodingKeys.ltr.stringValue: return ltr + case CodingKeys.h87.stringValue: return h87 + case CodingKeys.e14.stringValue: return e14 + case CodingKeys.kgm.stringValue: return kgm + case CodingKeys.d70.stringValue: return d70 + case CodingKeys.mlt.stringValue: return mlt + case CodingKeys.dlt.stringValue: return dlt + case CodingKeys.cmt.stringValue: return cmt + case CodingKeys.clt.stringValue: return clt default: return nil } } diff --git a/Modules/Sources/Model/Product.swift b/Modules/Sources/Model/ExampleProduct.swift similarity index 81% rename from Modules/Sources/Model/Product.swift rename to Modules/Sources/Model/ExampleProduct.swift index 879f55d..a400fd7 100644 --- a/Modules/Sources/Model/Product.swift +++ b/Modules/Sources/Model/ExampleProduct.swift @@ -11,14 +11,14 @@ import Tagged public enum UnitCodeTag {} public typealias UnitCode = Tagged -public struct Product: Equatable, Identifiable, Decodable { +public struct ExampleProduct: Equatable, Identifiable, Decodable { public enum ServingTemperature: String, Equatable, Decodable { case warm, cold } public typealias ID = Tagged - public var id: Product.ID + public var id: ExampleProduct.ID public var name: String public var `description`: String public var price: Double @@ -31,10 +31,10 @@ public struct Product: Equatable, Identifiable, Decodable { public struct LineItem: Equatable, Decodable, Identifiable { - public var id: Product.ID { + public var id: ExampleProduct.ID { product.id } - public var product: Product + public var product: ExampleProduct public var quantity: Int } diff --git a/Modules/Sources/Model/Mocks.swift b/Modules/Sources/Model/Mocks.swift index 358f43f..558037d 100644 --- a/Modules/Sources/Model/Mocks.swift +++ b/Modules/Sources/Model/Mocks.swift @@ -11,7 +11,7 @@ import StoreKit import XCTestDynamicOverlay // MARK: - Here are mocked versions of the domain models -extension Product { +extension ExampleProduct { public static let mock = Self( id: 1, @@ -35,12 +35,12 @@ extension Product { ) } -extension Array where Element == Product { +extension Array where Element == ExampleProduct { public static func mocks(_ count: Int) -> Self { guard count > 0 else { return [] } return (1...count).map { n in - var mock = Product.mock + var mock = ExampleProduct.mock mock.id = .init(rawValue: n) mock.name = "Croissant \(n)" @@ -54,7 +54,7 @@ extension Array where Element == LineItem { guard count > 0 else { return [] } return (1...count).map { n in - var mock = Product.mock + var mock = ExampleProduct.mock mock.id = .init(rawValue: n) mock.name = "Croissant \(n)" From c9c64e98bd730b89d215e9eb56966786b5a5f84d Mon Sep 17 00:00:00 2001 From: Jakob Mygind Date: Fri, 3 Feb 2023 11:11:53 +0100 Subject: [PATCH 06/10] - fix get LoginView running in previews --- Modules/Sources/AppVersion/Version.swift | 5 + .../Sources/Localizations/Localizations.swift | 1142 ++++++++--------- Modules/Sources/LoginFeature/LoginView.swift | 16 +- 3 files changed, 585 insertions(+), 578 deletions(-) diff --git a/Modules/Sources/AppVersion/Version.swift b/Modules/Sources/AppVersion/Version.swift index f1f46c0..f92bda4 100644 --- a/Modules/Sources/AppVersion/Version.swift +++ b/Modules/Sources/AppVersion/Version.swift @@ -25,6 +25,11 @@ public struct AppVersion { build: { Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "" } ) + public static let mock = Self( + version: { "1.2.3" }, + build: { "4" } + ) + public static let noop = Self( version: { "0.0.0" }, build: { "0" } diff --git a/Modules/Sources/Localizations/Localizations.swift b/Modules/Sources/Localizations/Localizations.swift index db68e26..6b6e514 100644 --- a/Modules/Sources/Localizations/Localizations.swift +++ b/Modules/Sources/Localizations/Localizations.swift @@ -33,34 +33,34 @@ import NLocalizationManager import LocalizationManager #endif public final class Localizations: LocalizableModel { - public var searchOrders = SearchOrders() public var orderDetailNewOrderSection = OrderDetailNewOrderSection() - public var printer = Printer() - public var orderStatus = OrderStatus() - public var printerOutput = PrinterOutput() public var error = Error() - public var login = Login() - public var orderDetails = OrderDetails() + public var printerOutput = PrinterOutput() + public var searchOrders = SearchOrders() + public var orderStatus = OrderStatus() public var deliveryType = DeliveryType() + public var units = Units() public var settings = Settings() - public var defaultSection = DefaultSection() + public var orderDetails = OrderDetails() + public var login = Login() public var dashboard = Dashboard() - public var units = Units() + public var defaultSection = DefaultSection() + public var printer = Printer() enum CodingKeys: String, CodingKey { - case searchOrders case orderDetailNewOrderSection - case printer - case orderStatus - case printerOutput case error - case login - case orderDetails + case printerOutput + case searchOrders + case orderStatus case deliveryType + case units case settings - case defaultSection = "default" + case orderDetails + case login case dashboard - case units + case defaultSection = "default" + case printer } public override init() { super.init() } @@ -68,131 +68,60 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - searchOrders = try container.decodeIfPresent(SearchOrders.self, forKey: .searchOrders) ?? searchOrders orderDetailNewOrderSection = try container.decodeIfPresent(OrderDetailNewOrderSection.self, forKey: .orderDetailNewOrderSection) ?? orderDetailNewOrderSection - printer = try container.decodeIfPresent(Printer.self, forKey: .printer) ?? printer - orderStatus = try container.decodeIfPresent(OrderStatus.self, forKey: .orderStatus) ?? orderStatus - printerOutput = try container.decodeIfPresent(PrinterOutput.self, forKey: .printerOutput) ?? printerOutput error = try container.decodeIfPresent(Error.self, forKey: .error) ?? error - login = try container.decodeIfPresent(Login.self, forKey: .login) ?? login - orderDetails = try container.decodeIfPresent(OrderDetails.self, forKey: .orderDetails) ?? orderDetails + printerOutput = try container.decodeIfPresent(PrinterOutput.self, forKey: .printerOutput) ?? printerOutput + searchOrders = try container.decodeIfPresent(SearchOrders.self, forKey: .searchOrders) ?? searchOrders + orderStatus = try container.decodeIfPresent(OrderStatus.self, forKey: .orderStatus) ?? orderStatus deliveryType = try container.decodeIfPresent(DeliveryType.self, forKey: .deliveryType) ?? deliveryType + units = try container.decodeIfPresent(Units.self, forKey: .units) ?? units settings = try container.decodeIfPresent(Settings.self, forKey: .settings) ?? settings - defaultSection = try container.decodeIfPresent(DefaultSection.self, forKey: .defaultSection) ?? defaultSection + orderDetails = try container.decodeIfPresent(OrderDetails.self, forKey: .orderDetails) ?? orderDetails + login = try container.decodeIfPresent(Login.self, forKey: .login) ?? login dashboard = try container.decodeIfPresent(Dashboard.self, forKey: .dashboard) ?? dashboard - units = try container.decodeIfPresent(Units.self, forKey: .units) ?? units + defaultSection = try container.decodeIfPresent(DefaultSection.self, forKey: .defaultSection) ?? defaultSection + printer = try container.decodeIfPresent(Printer.self, forKey: .printer) ?? printer } public override subscript(key: String) -> LocalizableSection? { switch key { - case CodingKeys.searchOrders.stringValue: return searchOrders case CodingKeys.orderDetailNewOrderSection.stringValue: return orderDetailNewOrderSection - case CodingKeys.printer.stringValue: return printer - case CodingKeys.orderStatus.stringValue: return orderStatus - case CodingKeys.printerOutput.stringValue: return printerOutput case CodingKeys.error.stringValue: return error - case CodingKeys.login.stringValue: return login - case CodingKeys.orderDetails.stringValue: return orderDetails + case CodingKeys.printerOutput.stringValue: return printerOutput + case CodingKeys.searchOrders.stringValue: return searchOrders + case CodingKeys.orderStatus.stringValue: return orderStatus case CodingKeys.deliveryType.stringValue: return deliveryType + case CodingKeys.units.stringValue: return units case CodingKeys.settings.stringValue: return settings - case CodingKeys.defaultSection.stringValue: return defaultSection + case CodingKeys.orderDetails.stringValue: return orderDetails + case CodingKeys.login.stringValue: return login case CodingKeys.dashboard.stringValue: return dashboard - case CodingKeys.units.stringValue: return units + case CodingKeys.defaultSection.stringValue: return defaultSection + case CodingKeys.printer.stringValue: return printer default: return nil } } - public final class SearchOrders: LocalizableSection { - public var orderNumberHeader = "" - public var emptyMessage = "" - public var customerNameHeader = "" - public var orderStatusHeader = "" - public var statusCompleted = "" - public var statusNew = "" - public var statusShipped = "" - public var orderDateHeader = "" - public var statusReady = "" - public var statusRejected = "" - public var searchfieldPlaceholder = "" - public var title = "" - public var statusAccepted = "" - - enum CodingKeys: String, CodingKey { - case orderNumberHeader - case emptyMessage - case customerNameHeader - case orderStatusHeader - case statusCompleted - case statusNew - case statusShipped - case orderDateHeader - case statusReady - case statusRejected - case searchfieldPlaceholder - case title - case statusAccepted - } - - public override init() { super.init() } - - public required init(from decoder: Decoder) throws { - super.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - orderNumberHeader = try container.decodeIfPresent(String.self, forKey: .orderNumberHeader) ?? "__orderNumberHeader" - emptyMessage = try container.decodeIfPresent(String.self, forKey: .emptyMessage) ?? "__emptyMessage" - customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" - orderStatusHeader = try container.decodeIfPresent(String.self, forKey: .orderStatusHeader) ?? "__orderStatusHeader" - statusCompleted = try container.decodeIfPresent(String.self, forKey: .statusCompleted) ?? "__statusCompleted" - statusNew = try container.decodeIfPresent(String.self, forKey: .statusNew) ?? "__statusNew" - statusShipped = try container.decodeIfPresent(String.self, forKey: .statusShipped) ?? "__statusShipped" - orderDateHeader = try container.decodeIfPresent(String.self, forKey: .orderDateHeader) ?? "__orderDateHeader" - statusReady = try container.decodeIfPresent(String.self, forKey: .statusReady) ?? "__statusReady" - statusRejected = try container.decodeIfPresent(String.self, forKey: .statusRejected) ?? "__statusRejected" - searchfieldPlaceholder = try container.decodeIfPresent(String.self, forKey: .searchfieldPlaceholder) ?? "__searchfieldPlaceholder" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - statusAccepted = try container.decodeIfPresent(String.self, forKey: .statusAccepted) ?? "__statusAccepted" - } - - public override subscript(key: String) -> String? { - switch key { - case CodingKeys.orderNumberHeader.stringValue: return orderNumberHeader - case CodingKeys.emptyMessage.stringValue: return emptyMessage - case CodingKeys.customerNameHeader.stringValue: return customerNameHeader - case CodingKeys.orderStatusHeader.stringValue: return orderStatusHeader - case CodingKeys.statusCompleted.stringValue: return statusCompleted - case CodingKeys.statusNew.stringValue: return statusNew - case CodingKeys.statusShipped.stringValue: return statusShipped - case CodingKeys.orderDateHeader.stringValue: return orderDateHeader - case CodingKeys.statusReady.stringValue: return statusReady - case CodingKeys.statusRejected.stringValue: return statusRejected - case CodingKeys.searchfieldPlaceholder.stringValue: return searchfieldPlaceholder - case CodingKeys.title.stringValue: return title - case CodingKeys.statusAccepted.stringValue: return statusAccepted - default: return nil - } - } - } - public final class OrderDetailNewOrderSection: LocalizableSection { + public var rejectButton = "" + public var pickedUpInStoreAt = "" public var acceptButton = "" + public var pickupTimeHeader = "" public var customerNameHeader = "" public var phoneNumberHeader = "" - public var rejectButton = "" - public var deliveryTimeHeader = "" - public var pickedUpInStoreAt = "" public var header = "" - public var pickupTimeHeader = "" + public var deliveryTimeHeader = "" public var subheader = "" enum CodingKeys: String, CodingKey { + case rejectButton + case pickedUpInStoreAt case acceptButton + case pickupTimeHeader case customerNameHeader case phoneNumberHeader - case rejectButton - case deliveryTimeHeader - case pickedUpInStoreAt case header - case pickupTimeHeader + case deliveryTimeHeader case subheader } @@ -201,52 +130,46 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) + rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" + pickedUpInStoreAt = try container.decodeIfPresent(String.self, forKey: .pickedUpInStoreAt) ?? "__pickedUpInStoreAt" acceptButton = try container.decodeIfPresent(String.self, forKey: .acceptButton) ?? "__acceptButton" + pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" phoneNumberHeader = try container.decodeIfPresent(String.self, forKey: .phoneNumberHeader) ?? "__phoneNumberHeader" - rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" - deliveryTimeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTimeHeader) ?? "__deliveryTimeHeader" - pickedUpInStoreAt = try container.decodeIfPresent(String.self, forKey: .pickedUpInStoreAt) ?? "__pickedUpInStoreAt" header = try container.decodeIfPresent(String.self, forKey: .header) ?? "__header" - pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" + deliveryTimeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTimeHeader) ?? "__deliveryTimeHeader" subheader = try container.decodeIfPresent(String.self, forKey: .subheader) ?? "__subheader" } public override subscript(key: String) -> String? { switch key { + case CodingKeys.rejectButton.stringValue: return rejectButton + case CodingKeys.pickedUpInStoreAt.stringValue: return pickedUpInStoreAt case CodingKeys.acceptButton.stringValue: return acceptButton + case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader case CodingKeys.customerNameHeader.stringValue: return customerNameHeader case CodingKeys.phoneNumberHeader.stringValue: return phoneNumberHeader - case CodingKeys.rejectButton.stringValue: return rejectButton - case CodingKeys.deliveryTimeHeader.stringValue: return deliveryTimeHeader - case CodingKeys.pickedUpInStoreAt.stringValue: return pickedUpInStoreAt case CodingKeys.header.stringValue: return header - case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader + case CodingKeys.deliveryTimeHeader.stringValue: return deliveryTimeHeader case CodingKeys.subheader.stringValue: return subheader default: return nil } } } - public final class Printer: LocalizableSection { - public var bluetoothHintFooter = "" - public var connectButton = "" - public var connectedSuccessMessage = "" - public var errorSomethingHappened = "" - public var sectionHeaderActivePrinter = "" - public var sectionHeaderNewPrinters = "" - public var title = "" - public var deleteButton = "" + public final class Error: LocalizableSection { + public var unknownError = "" + public var authenticationError = "" + public var serverError = "" + public var errorTitle = "" + public var connectionError = "" enum CodingKeys: String, CodingKey { - case bluetoothHintFooter - case connectButton - case connectedSuccessMessage - case errorSomethingHappened - case sectionHeaderActivePrinter - case sectionHeaderNewPrinters - case title - case deleteButton + case unknownError + case authenticationError + case serverError + case errorTitle + case connectionError } public override init() { super.init() } @@ -254,36 +177,44 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - bluetoothHintFooter = try container.decodeIfPresent(String.self, forKey: .bluetoothHintFooter) ?? "__bluetoothHintFooter" - connectButton = try container.decodeIfPresent(String.self, forKey: .connectButton) ?? "__connectButton" - connectedSuccessMessage = try container.decodeIfPresent(String.self, forKey: .connectedSuccessMessage) ?? "__connectedSuccessMessage" - errorSomethingHappened = try container.decodeIfPresent(String.self, forKey: .errorSomethingHappened) ?? "__errorSomethingHappened" - sectionHeaderActivePrinter = try container.decodeIfPresent(String.self, forKey: .sectionHeaderActivePrinter) ?? "__sectionHeaderActivePrinter" - sectionHeaderNewPrinters = try container.decodeIfPresent(String.self, forKey: .sectionHeaderNewPrinters) ?? "__sectionHeaderNewPrinters" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - deleteButton = try container.decodeIfPresent(String.self, forKey: .deleteButton) ?? "__deleteButton" + unknownError = try container.decodeIfPresent(String.self, forKey: .unknownError) ?? "__unknownError" + authenticationError = try container.decodeIfPresent(String.self, forKey: .authenticationError) ?? "__authenticationError" + serverError = try container.decodeIfPresent(String.self, forKey: .serverError) ?? "__serverError" + errorTitle = try container.decodeIfPresent(String.self, forKey: .errorTitle) ?? "__errorTitle" + connectionError = try container.decodeIfPresent(String.self, forKey: .connectionError) ?? "__connectionError" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.bluetoothHintFooter.stringValue: return bluetoothHintFooter - case CodingKeys.connectButton.stringValue: return connectButton - case CodingKeys.connectedSuccessMessage.stringValue: return connectedSuccessMessage - case CodingKeys.errorSomethingHappened.stringValue: return errorSomethingHappened - case CodingKeys.sectionHeaderActivePrinter.stringValue: return sectionHeaderActivePrinter - case CodingKeys.sectionHeaderNewPrinters.stringValue: return sectionHeaderNewPrinters - case CodingKeys.title.stringValue: return title - case CodingKeys.deleteButton.stringValue: return deleteButton + case CodingKeys.unknownError.stringValue: return unknownError + case CodingKeys.authenticationError.stringValue: return authenticationError + case CodingKeys.serverError.stringValue: return serverError + case CodingKeys.errorTitle.stringValue: return errorTitle + case CodingKeys.connectionError.stringValue: return connectionError default: return nil } } } - public final class OrderStatus: LocalizableSection { - public var accepted = "" + public final class PrinterOutput: LocalizableSection { + public var noteHeader = "" + public var otherHeader = "" + public var errorDeviceConnectionFailed = "" + public var warmHeader = "" + public var coldHeader = "" + public var includeCutlery = "" + public var orderNumber = "" + public var errorNoDeviceFound = "" enum CodingKeys: String, CodingKey { - case accepted + case noteHeader + case otherHeader + case errorDeviceConnectionFailed + case warmHeader + case coldHeader + case includeCutlery + case orderNumber + case errorNoDeviceFound } public override init() { super.init() } @@ -291,36 +222,60 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - accepted = try container.decodeIfPresent(String.self, forKey: .accepted) ?? "__accepted" + noteHeader = try container.decodeIfPresent(String.self, forKey: .noteHeader) ?? "__noteHeader" + otherHeader = try container.decodeIfPresent(String.self, forKey: .otherHeader) ?? "__otherHeader" + errorDeviceConnectionFailed = try container.decodeIfPresent(String.self, forKey: .errorDeviceConnectionFailed) ?? "__errorDeviceConnectionFailed" + warmHeader = try container.decodeIfPresent(String.self, forKey: .warmHeader) ?? "__warmHeader" + coldHeader = try container.decodeIfPresent(String.self, forKey: .coldHeader) ?? "__coldHeader" + includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" + orderNumber = try container.decodeIfPresent(String.self, forKey: .orderNumber) ?? "__orderNumber" + errorNoDeviceFound = try container.decodeIfPresent(String.self, forKey: .errorNoDeviceFound) ?? "__errorNoDeviceFound" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.accepted.stringValue: return accepted - default: return nil - } - } - } - - public final class PrinterOutput: LocalizableSection { - public var errorNoDeviceFound = "" - public var includeCutlery = "" - public var otherHeader = "" - public var coldHeader = "" - public var orderNumber = "" - public var errorDeviceConnectionFailed = "" - public var noteHeader = "" - public var warmHeader = "" + case CodingKeys.noteHeader.stringValue: return noteHeader + case CodingKeys.otherHeader.stringValue: return otherHeader + case CodingKeys.errorDeviceConnectionFailed.stringValue: return errorDeviceConnectionFailed + case CodingKeys.warmHeader.stringValue: return warmHeader + case CodingKeys.coldHeader.stringValue: return coldHeader + case CodingKeys.includeCutlery.stringValue: return includeCutlery + case CodingKeys.orderNumber.stringValue: return orderNumber + case CodingKeys.errorNoDeviceFound.stringValue: return errorNoDeviceFound + default: return nil + } + } + } + + public final class SearchOrders: LocalizableSection { + public var orderStatusHeader = "" + public var searchfieldPlaceholder = "" + public var orderNumberHeader = "" + public var customerNameHeader = "" + public var title = "" + public var statusReady = "" + public var statusCompleted = "" + public var statusShipped = "" + public var orderDateHeader = "" + public var statusAccepted = "" + public var emptyMessage = "" + public var statusRejected = "" + public var statusNew = "" enum CodingKeys: String, CodingKey { - case errorNoDeviceFound - case includeCutlery - case otherHeader - case coldHeader - case orderNumber - case errorDeviceConnectionFailed - case noteHeader - case warmHeader + case orderStatusHeader + case searchfieldPlaceholder + case orderNumberHeader + case customerNameHeader + case title + case statusReady + case statusCompleted + case statusShipped + case orderDateHeader + case statusAccepted + case emptyMessage + case statusRejected + case statusNew } public override init() { super.init() } @@ -328,44 +283,46 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - errorNoDeviceFound = try container.decodeIfPresent(String.self, forKey: .errorNoDeviceFound) ?? "__errorNoDeviceFound" - includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" - otherHeader = try container.decodeIfPresent(String.self, forKey: .otherHeader) ?? "__otherHeader" - coldHeader = try container.decodeIfPresent(String.self, forKey: .coldHeader) ?? "__coldHeader" - orderNumber = try container.decodeIfPresent(String.self, forKey: .orderNumber) ?? "__orderNumber" - errorDeviceConnectionFailed = try container.decodeIfPresent(String.self, forKey: .errorDeviceConnectionFailed) ?? "__errorDeviceConnectionFailed" - noteHeader = try container.decodeIfPresent(String.self, forKey: .noteHeader) ?? "__noteHeader" - warmHeader = try container.decodeIfPresent(String.self, forKey: .warmHeader) ?? "__warmHeader" + orderStatusHeader = try container.decodeIfPresent(String.self, forKey: .orderStatusHeader) ?? "__orderStatusHeader" + searchfieldPlaceholder = try container.decodeIfPresent(String.self, forKey: .searchfieldPlaceholder) ?? "__searchfieldPlaceholder" + orderNumberHeader = try container.decodeIfPresent(String.self, forKey: .orderNumberHeader) ?? "__orderNumberHeader" + customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + statusReady = try container.decodeIfPresent(String.self, forKey: .statusReady) ?? "__statusReady" + statusCompleted = try container.decodeIfPresent(String.self, forKey: .statusCompleted) ?? "__statusCompleted" + statusShipped = try container.decodeIfPresent(String.self, forKey: .statusShipped) ?? "__statusShipped" + orderDateHeader = try container.decodeIfPresent(String.self, forKey: .orderDateHeader) ?? "__orderDateHeader" + statusAccepted = try container.decodeIfPresent(String.self, forKey: .statusAccepted) ?? "__statusAccepted" + emptyMessage = try container.decodeIfPresent(String.self, forKey: .emptyMessage) ?? "__emptyMessage" + statusRejected = try container.decodeIfPresent(String.self, forKey: .statusRejected) ?? "__statusRejected" + statusNew = try container.decodeIfPresent(String.self, forKey: .statusNew) ?? "__statusNew" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.errorNoDeviceFound.stringValue: return errorNoDeviceFound - case CodingKeys.includeCutlery.stringValue: return includeCutlery - case CodingKeys.otherHeader.stringValue: return otherHeader - case CodingKeys.coldHeader.stringValue: return coldHeader - case CodingKeys.orderNumber.stringValue: return orderNumber - case CodingKeys.errorDeviceConnectionFailed.stringValue: return errorDeviceConnectionFailed - case CodingKeys.noteHeader.stringValue: return noteHeader - case CodingKeys.warmHeader.stringValue: return warmHeader + case CodingKeys.orderStatusHeader.stringValue: return orderStatusHeader + case CodingKeys.searchfieldPlaceholder.stringValue: return searchfieldPlaceholder + case CodingKeys.orderNumberHeader.stringValue: return orderNumberHeader + case CodingKeys.customerNameHeader.stringValue: return customerNameHeader + case CodingKeys.title.stringValue: return title + case CodingKeys.statusReady.stringValue: return statusReady + case CodingKeys.statusCompleted.stringValue: return statusCompleted + case CodingKeys.statusShipped.stringValue: return statusShipped + case CodingKeys.orderDateHeader.stringValue: return orderDateHeader + case CodingKeys.statusAccepted.stringValue: return statusAccepted + case CodingKeys.emptyMessage.stringValue: return emptyMessage + case CodingKeys.statusRejected.stringValue: return statusRejected + case CodingKeys.statusNew.stringValue: return statusNew default: return nil } } } - public final class Error: LocalizableSection { - public var errorTitle = "" - public var authenticationError = "" - public var unknownError = "" - public var serverError = "" - public var connectionError = "" + public final class OrderStatus: LocalizableSection { + public var accepted = "" enum CodingKeys: String, CodingKey { - case errorTitle - case authenticationError - case unknownError - case serverError - case connectionError + case accepted } public override init() { super.init() } @@ -373,48 +330,24 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - errorTitle = try container.decodeIfPresent(String.self, forKey: .errorTitle) ?? "__errorTitle" - authenticationError = try container.decodeIfPresent(String.self, forKey: .authenticationError) ?? "__authenticationError" - unknownError = try container.decodeIfPresent(String.self, forKey: .unknownError) ?? "__unknownError" - serverError = try container.decodeIfPresent(String.self, forKey: .serverError) ?? "__serverError" - connectionError = try container.decodeIfPresent(String.self, forKey: .connectionError) ?? "__connectionError" + accepted = try container.decodeIfPresent(String.self, forKey: .accepted) ?? "__accepted" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.errorTitle.stringValue: return errorTitle - case CodingKeys.authenticationError.stringValue: return authenticationError - case CodingKeys.unknownError.stringValue: return unknownError - case CodingKeys.serverError.stringValue: return serverError - case CodingKeys.connectionError.stringValue: return connectionError + case CodingKeys.accepted.stringValue: return accepted default: return nil } } } - public final class Login: LocalizableSection { - public var emailHeader = "" - public var resetPasswordMessage = "" - public var appName = "" - public var appVersionPrefix = "" - public var emailPlaceholder = "" - public var errorInvalidCredentials = "" - public var passwordPlaceholder = "" - public var loginButton = "" - public var passwordHeader = "" - public var title = "" + public final class DeliveryType: LocalizableSection { + public var delivery = "" + public var collect = "" enum CodingKeys: String, CodingKey { - case emailHeader - case resetPasswordMessage - case appName - case appVersionPrefix - case emailPlaceholder - case errorInvalidCredentials - case passwordPlaceholder - case loginButton - case passwordHeader - case title + case delivery + case collect } public override init() { super.init() } @@ -422,201 +355,42 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - emailHeader = try container.decodeIfPresent(String.self, forKey: .emailHeader) ?? "__emailHeader" - resetPasswordMessage = try container.decodeIfPresent(String.self, forKey: .resetPasswordMessage) ?? "__resetPasswordMessage" - appName = try container.decodeIfPresent(String.self, forKey: .appName) ?? "__appName" - appVersionPrefix = try container.decodeIfPresent(String.self, forKey: .appVersionPrefix) ?? "__appVersionPrefix" - emailPlaceholder = try container.decodeIfPresent(String.self, forKey: .emailPlaceholder) ?? "__emailPlaceholder" - errorInvalidCredentials = try container.decodeIfPresent(String.self, forKey: .errorInvalidCredentials) ?? "__errorInvalidCredentials" - passwordPlaceholder = try container.decodeIfPresent(String.self, forKey: .passwordPlaceholder) ?? "__passwordPlaceholder" - loginButton = try container.decodeIfPresent(String.self, forKey: .loginButton) ?? "__loginButton" - passwordHeader = try container.decodeIfPresent(String.self, forKey: .passwordHeader) ?? "__passwordHeader" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + delivery = try container.decodeIfPresent(String.self, forKey: .delivery) ?? "__delivery" + collect = try container.decodeIfPresent(String.self, forKey: .collect) ?? "__collect" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.emailHeader.stringValue: return emailHeader - case CodingKeys.resetPasswordMessage.stringValue: return resetPasswordMessage - case CodingKeys.appName.stringValue: return appName - case CodingKeys.appVersionPrefix.stringValue: return appVersionPrefix - case CodingKeys.emailPlaceholder.stringValue: return emailPlaceholder - case CodingKeys.errorInvalidCredentials.stringValue: return errorInvalidCredentials - case CodingKeys.passwordPlaceholder.stringValue: return passwordPlaceholder - case CodingKeys.loginButton.stringValue: return loginButton - case CodingKeys.passwordHeader.stringValue: return passwordHeader - case CodingKeys.title.stringValue: return title + case CodingKeys.delivery.stringValue: return delivery + case CodingKeys.collect.stringValue: return collect default: return nil } } } - public final class OrderDetails: LocalizableSection { - public var completedBanner = "" - public var infoOrderTime = "" - public var errorCouldNotFetchProducts = "" - public var deliveryTypeHeader = "" - public var rejectOrderAlertConfirm = "" - public var sectionHeaderTakeout = "" - public var infoAddress = "" - public var readyButton = "" - public var includeCutlery = "" - public var infoTakeoutPhone = "" - public var underPreparationButton = "" - public var rejectOrderAlertTitle = "" - public var sectionHeaderColdProducts = "" - public var infoDeliveryTime = "" - public var infoPaymentType = "" - public var outForDeliveryButton = "" - public var rejectButton = "" - public var today = "" - public var sectionHeaderCustomerInfo = "" - public var infoCustomerName = "" - public var sectionSubheaderColdProducts = "" - public var aPiece = "" - public var customerNoteHeader = "" - public var infoMobilePhone = "" - public var sectionHeaderWarmProducts = "" - public var infoTakeOutShopID = "" - public var sectionHeaderOrderStatus = "" - public var pickedUpButton = "" - public var errorStatusUpdateFailed = "" - public var rejectOrderAlertCancel = "" - public var rejectOrderAlertMessage = "" - public var sectionHeaderOtherProducts = "" - public var pickupTimeHeader = "" - public var printButton = "" - public var infoEmail = "" + public final class Units: LocalizableSection { + public var kgm = "" + public var ltr = "" + public var h87 = "" + public var clt = "" + public var d70 = "" + public var grm = "" + public var e14 = "" + public var dlt = "" + public var cmt = "" + public var mlt = "" enum CodingKeys: String, CodingKey { - case completedBanner - case infoOrderTime - case errorCouldNotFetchProducts - case deliveryTypeHeader - case rejectOrderAlertConfirm - case sectionHeaderTakeout - case infoAddress - case readyButton - case includeCutlery - case infoTakeoutPhone - case underPreparationButton - case rejectOrderAlertTitle - case sectionHeaderColdProducts - case infoDeliveryTime - case infoPaymentType - case outForDeliveryButton - case rejectButton - case today - case sectionHeaderCustomerInfo - case infoCustomerName - case sectionSubheaderColdProducts - case aPiece - case customerNoteHeader - case infoMobilePhone - case sectionHeaderWarmProducts - case infoTakeOutShopID - case sectionHeaderOrderStatus - case pickedUpButton - case errorStatusUpdateFailed - case rejectOrderAlertCancel - case rejectOrderAlertMessage - case sectionHeaderOtherProducts - case pickupTimeHeader - case printButton - case infoEmail - } - - public override init() { super.init() } - - public required init(from decoder: Decoder) throws { - super.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - completedBanner = try container.decodeIfPresent(String.self, forKey: .completedBanner) ?? "__completedBanner" - infoOrderTime = try container.decodeIfPresent(String.self, forKey: .infoOrderTime) ?? "__infoOrderTime" - errorCouldNotFetchProducts = try container.decodeIfPresent(String.self, forKey: .errorCouldNotFetchProducts) ?? "__errorCouldNotFetchProducts" - deliveryTypeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTypeHeader) ?? "__deliveryTypeHeader" - rejectOrderAlertConfirm = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertConfirm) ?? "__rejectOrderAlertConfirm" - sectionHeaderTakeout = try container.decodeIfPresent(String.self, forKey: .sectionHeaderTakeout) ?? "__sectionHeaderTakeout" - infoAddress = try container.decodeIfPresent(String.self, forKey: .infoAddress) ?? "__infoAddress" - readyButton = try container.decodeIfPresent(String.self, forKey: .readyButton) ?? "__readyButton" - includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" - infoTakeoutPhone = try container.decodeIfPresent(String.self, forKey: .infoTakeoutPhone) ?? "__infoTakeoutPhone" - underPreparationButton = try container.decodeIfPresent(String.self, forKey: .underPreparationButton) ?? "__underPreparationButton" - rejectOrderAlertTitle = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertTitle) ?? "__rejectOrderAlertTitle" - sectionHeaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderColdProducts) ?? "__sectionHeaderColdProducts" - infoDeliveryTime = try container.decodeIfPresent(String.self, forKey: .infoDeliveryTime) ?? "__infoDeliveryTime" - infoPaymentType = try container.decodeIfPresent(String.self, forKey: .infoPaymentType) ?? "__infoPaymentType" - outForDeliveryButton = try container.decodeIfPresent(String.self, forKey: .outForDeliveryButton) ?? "__outForDeliveryButton" - rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" - today = try container.decodeIfPresent(String.self, forKey: .today) ?? "__today" - sectionHeaderCustomerInfo = try container.decodeIfPresent(String.self, forKey: .sectionHeaderCustomerInfo) ?? "__sectionHeaderCustomerInfo" - infoCustomerName = try container.decodeIfPresent(String.self, forKey: .infoCustomerName) ?? "__infoCustomerName" - sectionSubheaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionSubheaderColdProducts) ?? "__sectionSubheaderColdProducts" - aPiece = try container.decodeIfPresent(String.self, forKey: .aPiece) ?? "__aPiece" - customerNoteHeader = try container.decodeIfPresent(String.self, forKey: .customerNoteHeader) ?? "__customerNoteHeader" - infoMobilePhone = try container.decodeIfPresent(String.self, forKey: .infoMobilePhone) ?? "__infoMobilePhone" - sectionHeaderWarmProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderWarmProducts) ?? "__sectionHeaderWarmProducts" - infoTakeOutShopID = try container.decodeIfPresent(String.self, forKey: .infoTakeOutShopID) ?? "__infoTakeOutShopID" - sectionHeaderOrderStatus = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOrderStatus) ?? "__sectionHeaderOrderStatus" - pickedUpButton = try container.decodeIfPresent(String.self, forKey: .pickedUpButton) ?? "__pickedUpButton" - errorStatusUpdateFailed = try container.decodeIfPresent(String.self, forKey: .errorStatusUpdateFailed) ?? "__errorStatusUpdateFailed" - rejectOrderAlertCancel = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertCancel) ?? "__rejectOrderAlertCancel" - rejectOrderAlertMessage = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertMessage) ?? "__rejectOrderAlertMessage" - sectionHeaderOtherProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOtherProducts) ?? "__sectionHeaderOtherProducts" - pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" - printButton = try container.decodeIfPresent(String.self, forKey: .printButton) ?? "__printButton" - infoEmail = try container.decodeIfPresent(String.self, forKey: .infoEmail) ?? "__infoEmail" - } - - public override subscript(key: String) -> String? { - switch key { - case CodingKeys.completedBanner.stringValue: return completedBanner - case CodingKeys.infoOrderTime.stringValue: return infoOrderTime - case CodingKeys.errorCouldNotFetchProducts.stringValue: return errorCouldNotFetchProducts - case CodingKeys.deliveryTypeHeader.stringValue: return deliveryTypeHeader - case CodingKeys.rejectOrderAlertConfirm.stringValue: return rejectOrderAlertConfirm - case CodingKeys.sectionHeaderTakeout.stringValue: return sectionHeaderTakeout - case CodingKeys.infoAddress.stringValue: return infoAddress - case CodingKeys.readyButton.stringValue: return readyButton - case CodingKeys.includeCutlery.stringValue: return includeCutlery - case CodingKeys.infoTakeoutPhone.stringValue: return infoTakeoutPhone - case CodingKeys.underPreparationButton.stringValue: return underPreparationButton - case CodingKeys.rejectOrderAlertTitle.stringValue: return rejectOrderAlertTitle - case CodingKeys.sectionHeaderColdProducts.stringValue: return sectionHeaderColdProducts - case CodingKeys.infoDeliveryTime.stringValue: return infoDeliveryTime - case CodingKeys.infoPaymentType.stringValue: return infoPaymentType - case CodingKeys.outForDeliveryButton.stringValue: return outForDeliveryButton - case CodingKeys.rejectButton.stringValue: return rejectButton - case CodingKeys.today.stringValue: return today - case CodingKeys.sectionHeaderCustomerInfo.stringValue: return sectionHeaderCustomerInfo - case CodingKeys.infoCustomerName.stringValue: return infoCustomerName - case CodingKeys.sectionSubheaderColdProducts.stringValue: return sectionSubheaderColdProducts - case CodingKeys.aPiece.stringValue: return aPiece - case CodingKeys.customerNoteHeader.stringValue: return customerNoteHeader - case CodingKeys.infoMobilePhone.stringValue: return infoMobilePhone - case CodingKeys.sectionHeaderWarmProducts.stringValue: return sectionHeaderWarmProducts - case CodingKeys.infoTakeOutShopID.stringValue: return infoTakeOutShopID - case CodingKeys.sectionHeaderOrderStatus.stringValue: return sectionHeaderOrderStatus - case CodingKeys.pickedUpButton.stringValue: return pickedUpButton - case CodingKeys.errorStatusUpdateFailed.stringValue: return errorStatusUpdateFailed - case CodingKeys.rejectOrderAlertCancel.stringValue: return rejectOrderAlertCancel - case CodingKeys.rejectOrderAlertMessage.stringValue: return rejectOrderAlertMessage - case CodingKeys.sectionHeaderOtherProducts.stringValue: return sectionHeaderOtherProducts - case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader - case CodingKeys.printButton.stringValue: return printButton - case CodingKeys.infoEmail.stringValue: return infoEmail - default: return nil - } - } - } - - public final class DeliveryType: LocalizableSection { - public var delivery = "" - public var collect = "" - - enum CodingKeys: String, CodingKey { - case delivery - case collect + case kgm + case ltr + case h87 + case clt + case d70 + case grm + case e14 + case dlt + case cmt + case mlt } public override init() { super.init() } @@ -624,42 +398,58 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - delivery = try container.decodeIfPresent(String.self, forKey: .delivery) ?? "__delivery" - collect = try container.decodeIfPresent(String.self, forKey: .collect) ?? "__collect" + kgm = try container.decodeIfPresent(String.self, forKey: .kgm) ?? "__kgm" + ltr = try container.decodeIfPresent(String.self, forKey: .ltr) ?? "__ltr" + h87 = try container.decodeIfPresent(String.self, forKey: .h87) ?? "__h87" + clt = try container.decodeIfPresent(String.self, forKey: .clt) ?? "__clt" + d70 = try container.decodeIfPresent(String.self, forKey: .d70) ?? "__d70" + grm = try container.decodeIfPresent(String.self, forKey: .grm) ?? "__grm" + e14 = try container.decodeIfPresent(String.self, forKey: .e14) ?? "__e14" + dlt = try container.decodeIfPresent(String.self, forKey: .dlt) ?? "__dlt" + cmt = try container.decodeIfPresent(String.self, forKey: .cmt) ?? "__cmt" + mlt = try container.decodeIfPresent(String.self, forKey: .mlt) ?? "__mlt" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.delivery.stringValue: return delivery - case CodingKeys.collect.stringValue: return collect + case CodingKeys.kgm.stringValue: return kgm + case CodingKeys.ltr.stringValue: return ltr + case CodingKeys.h87.stringValue: return h87 + case CodingKeys.clt.stringValue: return clt + case CodingKeys.d70.stringValue: return d70 + case CodingKeys.grm.stringValue: return grm + case CodingKeys.e14.stringValue: return e14 + case CodingKeys.dlt.stringValue: return dlt + case CodingKeys.cmt.stringValue: return cmt + case CodingKeys.mlt.stringValue: return mlt default: return nil } } } public final class Settings: LocalizableSection { - public var printerHeader = "" - public var logOutAlertMessage = "" public var selectPrinterButton = "" - public var logOutAlertCancel = "" - public var usernameHeader = "" - public var logOutButton = "" + public var logOutAlertMessage = "" + public var printerHeader = "" public var appVersionHeader = "" + public var usernameHeader = "" public var logoutAlertTitle = "" + public var logOutAlertCancel = "" public var logOutAlertConfirm = "" + public var logOutButton = "" public var closeButton = "" public var title = "" enum CodingKeys: String, CodingKey { - case printerHeader - case logOutAlertMessage case selectPrinterButton - case logOutAlertCancel - case usernameHeader - case logOutButton + case logOutAlertMessage + case printerHeader case appVersionHeader + case usernameHeader case logoutAlertTitle + case logOutAlertCancel case logOutAlertConfirm + case logOutButton case closeButton case title } @@ -669,30 +459,30 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - printerHeader = try container.decodeIfPresent(String.self, forKey: .printerHeader) ?? "__printerHeader" - logOutAlertMessage = try container.decodeIfPresent(String.self, forKey: .logOutAlertMessage) ?? "__logOutAlertMessage" selectPrinterButton = try container.decodeIfPresent(String.self, forKey: .selectPrinterButton) ?? "__selectPrinterButton" - logOutAlertCancel = try container.decodeIfPresent(String.self, forKey: .logOutAlertCancel) ?? "__logOutAlertCancel" - usernameHeader = try container.decodeIfPresent(String.self, forKey: .usernameHeader) ?? "__usernameHeader" - logOutButton = try container.decodeIfPresent(String.self, forKey: .logOutButton) ?? "__logOutButton" + logOutAlertMessage = try container.decodeIfPresent(String.self, forKey: .logOutAlertMessage) ?? "__logOutAlertMessage" + printerHeader = try container.decodeIfPresent(String.self, forKey: .printerHeader) ?? "__printerHeader" appVersionHeader = try container.decodeIfPresent(String.self, forKey: .appVersionHeader) ?? "__appVersionHeader" + usernameHeader = try container.decodeIfPresent(String.self, forKey: .usernameHeader) ?? "__usernameHeader" logoutAlertTitle = try container.decodeIfPresent(String.self, forKey: .logoutAlertTitle) ?? "__logoutAlertTitle" + logOutAlertCancel = try container.decodeIfPresent(String.self, forKey: .logOutAlertCancel) ?? "__logOutAlertCancel" logOutAlertConfirm = try container.decodeIfPresent(String.self, forKey: .logOutAlertConfirm) ?? "__logOutAlertConfirm" + logOutButton = try container.decodeIfPresent(String.self, forKey: .logOutButton) ?? "__logOutButton" closeButton = try container.decodeIfPresent(String.self, forKey: .closeButton) ?? "__closeButton" title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.printerHeader.stringValue: return printerHeader - case CodingKeys.logOutAlertMessage.stringValue: return logOutAlertMessage case CodingKeys.selectPrinterButton.stringValue: return selectPrinterButton - case CodingKeys.logOutAlertCancel.stringValue: return logOutAlertCancel - case CodingKeys.usernameHeader.stringValue: return usernameHeader - case CodingKeys.logOutButton.stringValue: return logOutButton + case CodingKeys.logOutAlertMessage.stringValue: return logOutAlertMessage + case CodingKeys.printerHeader.stringValue: return printerHeader case CodingKeys.appVersionHeader.stringValue: return appVersionHeader + case CodingKeys.usernameHeader.stringValue: return usernameHeader case CodingKeys.logoutAlertTitle.stringValue: return logoutAlertTitle + case CodingKeys.logOutAlertCancel.stringValue: return logOutAlertCancel case CodingKeys.logOutAlertConfirm.stringValue: return logOutAlertConfirm + case CodingKeys.logOutButton.stringValue: return logOutButton case CodingKeys.closeButton.stringValue: return closeButton case CodingKeys.title.stringValue: return title default: return nil @@ -700,35 +490,188 @@ public final class Localizations: LocalizableModel { } } - public final class DefaultSection: LocalizableSection { - public var back = "" - public var next = "" - public var yes = "" - public var no = "" - public var cancel = "" - public var ok = "" - public var later = "" - public var edit = "" - public var skip = "" - public var previous = "" - public var settings = "" - public var retry = "" - public var save = "" + public final class OrderDetails: LocalizableSection { + public var pickedUpButton = "" + public var infoAddress = "" + public var sectionHeaderColdProducts = "" + public var deliveryTypeHeader = "" + public var infoTakeoutPhone = "" + public var customerNoteHeader = "" + public var errorStatusUpdateFailed = "" + public var infoDeliveryTime = "" + public var sectionHeaderCustomerInfo = "" + public var sectionHeaderOtherProducts = "" + public var underPreparationButton = "" + public var errorCouldNotFetchProducts = "" + public var infoPaymentType = "" + public var rejectOrderAlertMessage = "" + public var sectionSubheaderColdProducts = "" + public var sectionHeaderOrderStatus = "" + public var includeCutlery = "" + public var readyButton = "" + public var rejectButton = "" + public var sectionHeaderWarmProducts = "" + public var completedBanner = "" + public var outForDeliveryButton = "" + public var aPiece = "" + public var rejectOrderAlertCancel = "" + public var infoEmail = "" + public var infoCustomerName = "" + public var pickupTimeHeader = "" + public var today = "" + public var sectionHeaderTakeout = "" + public var rejectOrderAlertConfirm = "" + public var printButton = "" + public var rejectOrderAlertTitle = "" + public var infoOrderTime = "" + public var infoTakeOutShopID = "" + public var infoMobilePhone = "" enum CodingKeys: String, CodingKey { - case back - case next - case yes - case no - case cancel - case ok - case later - case edit - case skip - case previous - case settings - case retry - case save + case pickedUpButton + case infoAddress + case sectionHeaderColdProducts + case deliveryTypeHeader + case infoTakeoutPhone + case customerNoteHeader + case errorStatusUpdateFailed + case infoDeliveryTime + case sectionHeaderCustomerInfo + case sectionHeaderOtherProducts + case underPreparationButton + case errorCouldNotFetchProducts + case infoPaymentType + case rejectOrderAlertMessage + case sectionSubheaderColdProducts + case sectionHeaderOrderStatus + case includeCutlery + case readyButton + case rejectButton + case sectionHeaderWarmProducts + case completedBanner + case outForDeliveryButton + case aPiece + case rejectOrderAlertCancel + case infoEmail + case infoCustomerName + case pickupTimeHeader + case today + case sectionHeaderTakeout + case rejectOrderAlertConfirm + case printButton + case rejectOrderAlertTitle + case infoOrderTime + case infoTakeOutShopID + case infoMobilePhone + } + + public override init() { super.init() } + + public required init(from decoder: Decoder) throws { + super.init() + let container = try decoder.container(keyedBy: CodingKeys.self) + pickedUpButton = try container.decodeIfPresent(String.self, forKey: .pickedUpButton) ?? "__pickedUpButton" + infoAddress = try container.decodeIfPresent(String.self, forKey: .infoAddress) ?? "__infoAddress" + sectionHeaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderColdProducts) ?? "__sectionHeaderColdProducts" + deliveryTypeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTypeHeader) ?? "__deliveryTypeHeader" + infoTakeoutPhone = try container.decodeIfPresent(String.self, forKey: .infoTakeoutPhone) ?? "__infoTakeoutPhone" + customerNoteHeader = try container.decodeIfPresent(String.self, forKey: .customerNoteHeader) ?? "__customerNoteHeader" + errorStatusUpdateFailed = try container.decodeIfPresent(String.self, forKey: .errorStatusUpdateFailed) ?? "__errorStatusUpdateFailed" + infoDeliveryTime = try container.decodeIfPresent(String.self, forKey: .infoDeliveryTime) ?? "__infoDeliveryTime" + sectionHeaderCustomerInfo = try container.decodeIfPresent(String.self, forKey: .sectionHeaderCustomerInfo) ?? "__sectionHeaderCustomerInfo" + sectionHeaderOtherProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOtherProducts) ?? "__sectionHeaderOtherProducts" + underPreparationButton = try container.decodeIfPresent(String.self, forKey: .underPreparationButton) ?? "__underPreparationButton" + errorCouldNotFetchProducts = try container.decodeIfPresent(String.self, forKey: .errorCouldNotFetchProducts) ?? "__errorCouldNotFetchProducts" + infoPaymentType = try container.decodeIfPresent(String.self, forKey: .infoPaymentType) ?? "__infoPaymentType" + rejectOrderAlertMessage = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertMessage) ?? "__rejectOrderAlertMessage" + sectionSubheaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionSubheaderColdProducts) ?? "__sectionSubheaderColdProducts" + sectionHeaderOrderStatus = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOrderStatus) ?? "__sectionHeaderOrderStatus" + includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" + readyButton = try container.decodeIfPresent(String.self, forKey: .readyButton) ?? "__readyButton" + rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" + sectionHeaderWarmProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderWarmProducts) ?? "__sectionHeaderWarmProducts" + completedBanner = try container.decodeIfPresent(String.self, forKey: .completedBanner) ?? "__completedBanner" + outForDeliveryButton = try container.decodeIfPresent(String.self, forKey: .outForDeliveryButton) ?? "__outForDeliveryButton" + aPiece = try container.decodeIfPresent(String.self, forKey: .aPiece) ?? "__aPiece" + rejectOrderAlertCancel = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertCancel) ?? "__rejectOrderAlertCancel" + infoEmail = try container.decodeIfPresent(String.self, forKey: .infoEmail) ?? "__infoEmail" + infoCustomerName = try container.decodeIfPresent(String.self, forKey: .infoCustomerName) ?? "__infoCustomerName" + pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" + today = try container.decodeIfPresent(String.self, forKey: .today) ?? "__today" + sectionHeaderTakeout = try container.decodeIfPresent(String.self, forKey: .sectionHeaderTakeout) ?? "__sectionHeaderTakeout" + rejectOrderAlertConfirm = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertConfirm) ?? "__rejectOrderAlertConfirm" + printButton = try container.decodeIfPresent(String.self, forKey: .printButton) ?? "__printButton" + rejectOrderAlertTitle = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertTitle) ?? "__rejectOrderAlertTitle" + infoOrderTime = try container.decodeIfPresent(String.self, forKey: .infoOrderTime) ?? "__infoOrderTime" + infoTakeOutShopID = try container.decodeIfPresent(String.self, forKey: .infoTakeOutShopID) ?? "__infoTakeOutShopID" + infoMobilePhone = try container.decodeIfPresent(String.self, forKey: .infoMobilePhone) ?? "__infoMobilePhone" + } + + public override subscript(key: String) -> String? { + switch key { + case CodingKeys.pickedUpButton.stringValue: return pickedUpButton + case CodingKeys.infoAddress.stringValue: return infoAddress + case CodingKeys.sectionHeaderColdProducts.stringValue: return sectionHeaderColdProducts + case CodingKeys.deliveryTypeHeader.stringValue: return deliveryTypeHeader + case CodingKeys.infoTakeoutPhone.stringValue: return infoTakeoutPhone + case CodingKeys.customerNoteHeader.stringValue: return customerNoteHeader + case CodingKeys.errorStatusUpdateFailed.stringValue: return errorStatusUpdateFailed + case CodingKeys.infoDeliveryTime.stringValue: return infoDeliveryTime + case CodingKeys.sectionHeaderCustomerInfo.stringValue: return sectionHeaderCustomerInfo + case CodingKeys.sectionHeaderOtherProducts.stringValue: return sectionHeaderOtherProducts + case CodingKeys.underPreparationButton.stringValue: return underPreparationButton + case CodingKeys.errorCouldNotFetchProducts.stringValue: return errorCouldNotFetchProducts + case CodingKeys.infoPaymentType.stringValue: return infoPaymentType + case CodingKeys.rejectOrderAlertMessage.stringValue: return rejectOrderAlertMessage + case CodingKeys.sectionSubheaderColdProducts.stringValue: return sectionSubheaderColdProducts + case CodingKeys.sectionHeaderOrderStatus.stringValue: return sectionHeaderOrderStatus + case CodingKeys.includeCutlery.stringValue: return includeCutlery + case CodingKeys.readyButton.stringValue: return readyButton + case CodingKeys.rejectButton.stringValue: return rejectButton + case CodingKeys.sectionHeaderWarmProducts.stringValue: return sectionHeaderWarmProducts + case CodingKeys.completedBanner.stringValue: return completedBanner + case CodingKeys.outForDeliveryButton.stringValue: return outForDeliveryButton + case CodingKeys.aPiece.stringValue: return aPiece + case CodingKeys.rejectOrderAlertCancel.stringValue: return rejectOrderAlertCancel + case CodingKeys.infoEmail.stringValue: return infoEmail + case CodingKeys.infoCustomerName.stringValue: return infoCustomerName + case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader + case CodingKeys.today.stringValue: return today + case CodingKeys.sectionHeaderTakeout.stringValue: return sectionHeaderTakeout + case CodingKeys.rejectOrderAlertConfirm.stringValue: return rejectOrderAlertConfirm + case CodingKeys.printButton.stringValue: return printButton + case CodingKeys.rejectOrderAlertTitle.stringValue: return rejectOrderAlertTitle + case CodingKeys.infoOrderTime.stringValue: return infoOrderTime + case CodingKeys.infoTakeOutShopID.stringValue: return infoTakeOutShopID + case CodingKeys.infoMobilePhone.stringValue: return infoMobilePhone + default: return nil + } + } + } + + public final class Login: LocalizableSection { + public var emailHeader = "" + public var loginButton = "" + public var passwordHeader = "" + public var passwordPlaceholder = "" + public var appName = "" + public var appVersionPrefix = "" + public var resetPasswordMessage = "" + public var title = "" + public var emailPlaceholder = "" + public var errorInvalidCredentials = "" + + enum CodingKeys: String, CodingKey { + case emailHeader + case loginButton + case passwordHeader + case passwordPlaceholder + case appName + case appVersionPrefix + case resetPasswordMessage + case title + case emailPlaceholder + case errorInvalidCredentials } public override init() { super.init() } @@ -736,76 +679,70 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - back = try container.decodeIfPresent(String.self, forKey: .back) ?? "__back" - next = try container.decodeIfPresent(String.self, forKey: .next) ?? "__next" - yes = try container.decodeIfPresent(String.self, forKey: .yes) ?? "__yes" - no = try container.decodeIfPresent(String.self, forKey: .no) ?? "__no" - cancel = try container.decodeIfPresent(String.self, forKey: .cancel) ?? "__cancel" - ok = try container.decodeIfPresent(String.self, forKey: .ok) ?? "__ok" - later = try container.decodeIfPresent(String.self, forKey: .later) ?? "__later" - edit = try container.decodeIfPresent(String.self, forKey: .edit) ?? "__edit" - skip = try container.decodeIfPresent(String.self, forKey: .skip) ?? "__skip" - previous = try container.decodeIfPresent(String.self, forKey: .previous) ?? "__previous" - settings = try container.decodeIfPresent(String.self, forKey: .settings) ?? "__settings" - retry = try container.decodeIfPresent(String.self, forKey: .retry) ?? "__retry" - save = try container.decodeIfPresent(String.self, forKey: .save) ?? "__save" + emailHeader = try container.decodeIfPresent(String.self, forKey: .emailHeader) ?? "__emailHeader" + loginButton = try container.decodeIfPresent(String.self, forKey: .loginButton) ?? "__loginButton" + passwordHeader = try container.decodeIfPresent(String.self, forKey: .passwordHeader) ?? "__passwordHeader" + passwordPlaceholder = try container.decodeIfPresent(String.self, forKey: .passwordPlaceholder) ?? "__passwordPlaceholder" + appName = try container.decodeIfPresent(String.self, forKey: .appName) ?? "__appName" + appVersionPrefix = try container.decodeIfPresent(String.self, forKey: .appVersionPrefix) ?? "__appVersionPrefix" + resetPasswordMessage = try container.decodeIfPresent(String.self, forKey: .resetPasswordMessage) ?? "__resetPasswordMessage" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + emailPlaceholder = try container.decodeIfPresent(String.self, forKey: .emailPlaceholder) ?? "__emailPlaceholder" + errorInvalidCredentials = try container.decodeIfPresent(String.self, forKey: .errorInvalidCredentials) ?? "__errorInvalidCredentials" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.back.stringValue: return back - case CodingKeys.next.stringValue: return next - case CodingKeys.yes.stringValue: return yes - case CodingKeys.no.stringValue: return no - case CodingKeys.cancel.stringValue: return cancel - case CodingKeys.ok.stringValue: return ok - case CodingKeys.later.stringValue: return later - case CodingKeys.edit.stringValue: return edit - case CodingKeys.skip.stringValue: return skip - case CodingKeys.previous.stringValue: return previous - case CodingKeys.settings.stringValue: return settings - case CodingKeys.retry.stringValue: return retry - case CodingKeys.save.stringValue: return save + case CodingKeys.emailHeader.stringValue: return emailHeader + case CodingKeys.loginButton.stringValue: return loginButton + case CodingKeys.passwordHeader.stringValue: return passwordHeader + case CodingKeys.passwordPlaceholder.stringValue: return passwordPlaceholder + case CodingKeys.appName.stringValue: return appName + case CodingKeys.appVersionPrefix.stringValue: return appVersionPrefix + case CodingKeys.resetPasswordMessage.stringValue: return resetPasswordMessage + case CodingKeys.title.stringValue: return title + case CodingKeys.emailPlaceholder.stringValue: return emailPlaceholder + case CodingKeys.errorInvalidCredentials.stringValue: return errorInvalidCredentials default: return nil } } } public final class Dashboard: LocalizableSection { - public var allOrdersButton = "" public var sectionLater = "" + public var columnOutForDelivery = "" + public var columnIncomingEmpty = "" + public var columnReady = "" + public var columnReadyEmpty = "" public var columnAccepted = "" public var sectionToday = "" - public var columnAcceptedEmpty = "" public var itemsPlural = "" + public var columnOutForDeliveryEmpty = "" + public var columnAcceptedEmpty = "" public var columnDoneToday = "" - public var columnReadyEmpty = "" + public var allOrdersButton = "" public var sectionTomorrow = "" public var columnDoneTodayEmpty = "" - public var columnIncomingEmpty = "" - public var columnOutForDelivery = "" - public var columnReady = "" - public var columnOutForDeliveryEmpty = "" - public var columnIncoming = "" public var itemsSingular = "" + public var columnIncoming = "" enum CodingKeys: String, CodingKey { - case allOrdersButton case sectionLater + case columnOutForDelivery + case columnIncomingEmpty + case columnReady + case columnReadyEmpty case columnAccepted case sectionToday - case columnAcceptedEmpty case itemsPlural + case columnOutForDeliveryEmpty + case columnAcceptedEmpty case columnDoneToday - case columnReadyEmpty + case allOrdersButton case sectionTomorrow case columnDoneTodayEmpty - case columnIncomingEmpty - case columnOutForDelivery - case columnReady - case columnOutForDeliveryEmpty - case columnIncoming case itemsSingular + case columnIncoming } public override init() { super.init() } @@ -813,70 +750,76 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - allOrdersButton = try container.decodeIfPresent(String.self, forKey: .allOrdersButton) ?? "__allOrdersButton" sectionLater = try container.decodeIfPresent(String.self, forKey: .sectionLater) ?? "__sectionLater" + columnOutForDelivery = try container.decodeIfPresent(String.self, forKey: .columnOutForDelivery) ?? "__columnOutForDelivery" + columnIncomingEmpty = try container.decodeIfPresent(String.self, forKey: .columnIncomingEmpty) ?? "__columnIncomingEmpty" + columnReady = try container.decodeIfPresent(String.self, forKey: .columnReady) ?? "__columnReady" + columnReadyEmpty = try container.decodeIfPresent(String.self, forKey: .columnReadyEmpty) ?? "__columnReadyEmpty" columnAccepted = try container.decodeIfPresent(String.self, forKey: .columnAccepted) ?? "__columnAccepted" sectionToday = try container.decodeIfPresent(String.self, forKey: .sectionToday) ?? "__sectionToday" - columnAcceptedEmpty = try container.decodeIfPresent(String.self, forKey: .columnAcceptedEmpty) ?? "__columnAcceptedEmpty" itemsPlural = try container.decodeIfPresent(String.self, forKey: .itemsPlural) ?? "__itemsPlural" + columnOutForDeliveryEmpty = try container.decodeIfPresent(String.self, forKey: .columnOutForDeliveryEmpty) ?? "__columnOutForDeliveryEmpty" + columnAcceptedEmpty = try container.decodeIfPresent(String.self, forKey: .columnAcceptedEmpty) ?? "__columnAcceptedEmpty" columnDoneToday = try container.decodeIfPresent(String.self, forKey: .columnDoneToday) ?? "__columnDoneToday" - columnReadyEmpty = try container.decodeIfPresent(String.self, forKey: .columnReadyEmpty) ?? "__columnReadyEmpty" + allOrdersButton = try container.decodeIfPresent(String.self, forKey: .allOrdersButton) ?? "__allOrdersButton" sectionTomorrow = try container.decodeIfPresent(String.self, forKey: .sectionTomorrow) ?? "__sectionTomorrow" columnDoneTodayEmpty = try container.decodeIfPresent(String.self, forKey: .columnDoneTodayEmpty) ?? "__columnDoneTodayEmpty" - columnIncomingEmpty = try container.decodeIfPresent(String.self, forKey: .columnIncomingEmpty) ?? "__columnIncomingEmpty" - columnOutForDelivery = try container.decodeIfPresent(String.self, forKey: .columnOutForDelivery) ?? "__columnOutForDelivery" - columnReady = try container.decodeIfPresent(String.self, forKey: .columnReady) ?? "__columnReady" - columnOutForDeliveryEmpty = try container.decodeIfPresent(String.self, forKey: .columnOutForDeliveryEmpty) ?? "__columnOutForDeliveryEmpty" - columnIncoming = try container.decodeIfPresent(String.self, forKey: .columnIncoming) ?? "__columnIncoming" itemsSingular = try container.decodeIfPresent(String.self, forKey: .itemsSingular) ?? "__itemsSingular" + columnIncoming = try container.decodeIfPresent(String.self, forKey: .columnIncoming) ?? "__columnIncoming" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.allOrdersButton.stringValue: return allOrdersButton case CodingKeys.sectionLater.stringValue: return sectionLater + case CodingKeys.columnOutForDelivery.stringValue: return columnOutForDelivery + case CodingKeys.columnIncomingEmpty.stringValue: return columnIncomingEmpty + case CodingKeys.columnReady.stringValue: return columnReady + case CodingKeys.columnReadyEmpty.stringValue: return columnReadyEmpty case CodingKeys.columnAccepted.stringValue: return columnAccepted case CodingKeys.sectionToday.stringValue: return sectionToday - case CodingKeys.columnAcceptedEmpty.stringValue: return columnAcceptedEmpty case CodingKeys.itemsPlural.stringValue: return itemsPlural + case CodingKeys.columnOutForDeliveryEmpty.stringValue: return columnOutForDeliveryEmpty + case CodingKeys.columnAcceptedEmpty.stringValue: return columnAcceptedEmpty case CodingKeys.columnDoneToday.stringValue: return columnDoneToday - case CodingKeys.columnReadyEmpty.stringValue: return columnReadyEmpty + case CodingKeys.allOrdersButton.stringValue: return allOrdersButton case CodingKeys.sectionTomorrow.stringValue: return sectionTomorrow case CodingKeys.columnDoneTodayEmpty.stringValue: return columnDoneTodayEmpty - case CodingKeys.columnIncomingEmpty.stringValue: return columnIncomingEmpty - case CodingKeys.columnOutForDelivery.stringValue: return columnOutForDelivery - case CodingKeys.columnReady.stringValue: return columnReady - case CodingKeys.columnOutForDeliveryEmpty.stringValue: return columnOutForDeliveryEmpty - case CodingKeys.columnIncoming.stringValue: return columnIncoming case CodingKeys.itemsSingular.stringValue: return itemsSingular + case CodingKeys.columnIncoming.stringValue: return columnIncoming default: return nil } } } - public final class Units: LocalizableSection { - public var grm = "" - public var ltr = "" - public var h87 = "" - public var e14 = "" - public var kgm = "" - public var d70 = "" - public var mlt = "" - public var dlt = "" - public var cmt = "" - public var clt = "" + public final class DefaultSection: LocalizableSection { + public var back = "" + public var skip = "" + public var edit = "" + public var ok = "" + public var later = "" + public var save = "" + public var previous = "" + public var retry = "" + public var yes = "" + public var settings = "" + public var no = "" + public var next = "" + public var cancel = "" enum CodingKeys: String, CodingKey { - case grm - case ltr - case h87 - case e14 - case kgm - case d70 - case mlt - case dlt - case cmt - case clt + case back + case skip + case edit + case ok + case later + case save + case previous + case retry + case yes + case settings + case no + case next + case cancel } public override init() { super.init() } @@ -884,30 +827,87 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - grm = try container.decodeIfPresent(String.self, forKey: .grm) ?? "__grm" - ltr = try container.decodeIfPresent(String.self, forKey: .ltr) ?? "__ltr" - h87 = try container.decodeIfPresent(String.self, forKey: .h87) ?? "__h87" - e14 = try container.decodeIfPresent(String.self, forKey: .e14) ?? "__e14" - kgm = try container.decodeIfPresent(String.self, forKey: .kgm) ?? "__kgm" - d70 = try container.decodeIfPresent(String.self, forKey: .d70) ?? "__d70" - mlt = try container.decodeIfPresent(String.self, forKey: .mlt) ?? "__mlt" - dlt = try container.decodeIfPresent(String.self, forKey: .dlt) ?? "__dlt" - cmt = try container.decodeIfPresent(String.self, forKey: .cmt) ?? "__cmt" - clt = try container.decodeIfPresent(String.self, forKey: .clt) ?? "__clt" + back = try container.decodeIfPresent(String.self, forKey: .back) ?? "__back" + skip = try container.decodeIfPresent(String.self, forKey: .skip) ?? "__skip" + edit = try container.decodeIfPresent(String.self, forKey: .edit) ?? "__edit" + ok = try container.decodeIfPresent(String.self, forKey: .ok) ?? "__ok" + later = try container.decodeIfPresent(String.self, forKey: .later) ?? "__later" + save = try container.decodeIfPresent(String.self, forKey: .save) ?? "__save" + previous = try container.decodeIfPresent(String.self, forKey: .previous) ?? "__previous" + retry = try container.decodeIfPresent(String.self, forKey: .retry) ?? "__retry" + yes = try container.decodeIfPresent(String.self, forKey: .yes) ?? "__yes" + settings = try container.decodeIfPresent(String.self, forKey: .settings) ?? "__settings" + no = try container.decodeIfPresent(String.self, forKey: .no) ?? "__no" + next = try container.decodeIfPresent(String.self, forKey: .next) ?? "__next" + cancel = try container.decodeIfPresent(String.self, forKey: .cancel) ?? "__cancel" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.grm.stringValue: return grm - case CodingKeys.ltr.stringValue: return ltr - case CodingKeys.h87.stringValue: return h87 - case CodingKeys.e14.stringValue: return e14 - case CodingKeys.kgm.stringValue: return kgm - case CodingKeys.d70.stringValue: return d70 - case CodingKeys.mlt.stringValue: return mlt - case CodingKeys.dlt.stringValue: return dlt - case CodingKeys.cmt.stringValue: return cmt - case CodingKeys.clt.stringValue: return clt + case CodingKeys.back.stringValue: return back + case CodingKeys.skip.stringValue: return skip + case CodingKeys.edit.stringValue: return edit + case CodingKeys.ok.stringValue: return ok + case CodingKeys.later.stringValue: return later + case CodingKeys.save.stringValue: return save + case CodingKeys.previous.stringValue: return previous + case CodingKeys.retry.stringValue: return retry + case CodingKeys.yes.stringValue: return yes + case CodingKeys.settings.stringValue: return settings + case CodingKeys.no.stringValue: return no + case CodingKeys.next.stringValue: return next + case CodingKeys.cancel.stringValue: return cancel + default: return nil + } + } + } + + public final class Printer: LocalizableSection { + public var bluetoothHintFooter = "" + public var connectedSuccessMessage = "" + public var sectionHeaderActivePrinter = "" + public var errorSomethingHappened = "" + public var deleteButton = "" + public var sectionHeaderNewPrinters = "" + public var title = "" + public var connectButton = "" + + enum CodingKeys: String, CodingKey { + case bluetoothHintFooter + case connectedSuccessMessage + case sectionHeaderActivePrinter + case errorSomethingHappened + case deleteButton + case sectionHeaderNewPrinters + case title + case connectButton + } + + public override init() { super.init() } + + public required init(from decoder: Decoder) throws { + super.init() + let container = try decoder.container(keyedBy: CodingKeys.self) + bluetoothHintFooter = try container.decodeIfPresent(String.self, forKey: .bluetoothHintFooter) ?? "__bluetoothHintFooter" + connectedSuccessMessage = try container.decodeIfPresent(String.self, forKey: .connectedSuccessMessage) ?? "__connectedSuccessMessage" + sectionHeaderActivePrinter = try container.decodeIfPresent(String.self, forKey: .sectionHeaderActivePrinter) ?? "__sectionHeaderActivePrinter" + errorSomethingHappened = try container.decodeIfPresent(String.self, forKey: .errorSomethingHappened) ?? "__errorSomethingHappened" + deleteButton = try container.decodeIfPresent(String.self, forKey: .deleteButton) ?? "__deleteButton" + sectionHeaderNewPrinters = try container.decodeIfPresent(String.self, forKey: .sectionHeaderNewPrinters) ?? "__sectionHeaderNewPrinters" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + connectButton = try container.decodeIfPresent(String.self, forKey: .connectButton) ?? "__connectButton" + } + + public override subscript(key: String) -> String? { + switch key { + case CodingKeys.bluetoothHintFooter.stringValue: return bluetoothHintFooter + case CodingKeys.connectedSuccessMessage.stringValue: return connectedSuccessMessage + case CodingKeys.sectionHeaderActivePrinter.stringValue: return sectionHeaderActivePrinter + case CodingKeys.errorSomethingHappened.stringValue: return errorSomethingHappened + case CodingKeys.deleteButton.stringValue: return deleteButton + case CodingKeys.sectionHeaderNewPrinters.stringValue: return sectionHeaderNewPrinters + case CodingKeys.title.stringValue: return title + case CodingKeys.connectButton.stringValue: return connectButton default: return nil } } diff --git a/Modules/Sources/LoginFeature/LoginView.swift b/Modules/Sources/LoginFeature/LoginView.swift index 9ffeec1..0cc62b7 100644 --- a/Modules/Sources/LoginFeature/LoginView.swift +++ b/Modules/Sources/LoginFeature/LoginView.swift @@ -5,6 +5,7 @@ // Created by Jakob Mygind on 09/12/2021. // +import Dependencies import Localizations import Style import SwiftUI @@ -97,14 +98,15 @@ public struct LoginView: View { import Localizations struct LoginView_Previews: PreviewProvider { - static var localizations: ObservableLocalizations = .init(.bundled) - static var previews: some View { - LoginView( - viewModel: .init( - onSuccess: { _, _ in } - ) - ) + LoginView(viewModel: withDependencies { + $0.localizations = .bundled + $0.apiClient = .mock + $0.appVersion = .mock + } operation: { + LoginViewModel(onSuccess: { _, _ in }) + }) + .registerFonts() .environmentObject(ObservableLocalizations.bundled) } From 0e92ab1d497add7514726094afb046b44238ce6f Mon Sep 17 00:00:00 2001 From: Jakob Mygind Date: Fri, 3 Feb 2023 13:59:18 +0100 Subject: [PATCH 07/10] feat: Add test for login feature and refactor slightly --- .../xcschemes/LoginFeature.xcscheme | 77 +++++++++++++++++++ Modules/Sources/APIClient/Client.swift | 4 +- Modules/Sources/APIClient/DependencyKey.swift | 4 + Modules/Sources/APIClient/Mocks.swift | 4 +- .../Sources/AppVersion/DependencyKey.swift | 4 + Modules/Sources/LoginFeature/LoginView.swift | 20 ++++- .../Sources/LoginFeature/LoginViewModel.swift | 44 +++++------ .../LoginFeatureTests/LoginFeatureTests.swift | 48 +++++++++++- 8 files changed, 172 insertions(+), 33 deletions(-) create mode 100644 Modules/.swiftpm/xcode/xcshareddata/xcschemes/LoginFeature.xcscheme diff --git a/Modules/.swiftpm/xcode/xcshareddata/xcschemes/LoginFeature.xcscheme b/Modules/.swiftpm/xcode/xcshareddata/xcschemes/LoginFeature.xcscheme new file mode 100644 index 0000000..6ccb173 --- /dev/null +++ b/Modules/.swiftpm/xcode/xcshareddata/xcschemes/LoginFeature.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Modules/Sources/APIClient/Client.swift b/Modules/Sources/APIClient/Client.swift index ced2345..286eb01 100644 --- a/Modules/Sources/APIClient/Client.swift +++ b/Modules/Sources/APIClient/Client.swift @@ -17,14 +17,14 @@ public struct APIClient { public var fetchExampleProducts: () async throws -> [ExampleProduct] public var setBaseURL: (URL) -> Void public var currentBaseURL: () -> URL - public var tokensUpdateStream: AsyncStream + public var tokensUpdateStream: () -> AsyncStream public init( authenticate: @escaping (Username, Password) async throws -> APITokensEnvelope, fetchExampleProducts: @escaping () async throws -> [ExampleProduct], setBaseURL: @escaping (URL) -> Void, currentBaseURL: @escaping () -> URL, - tokensUpdateStream: AsyncStream + tokensUpdateStream: @escaping () -> AsyncStream ) { self.authenticate = authenticate self.fetchExampleProducts = fetchExampleProducts diff --git a/Modules/Sources/APIClient/DependencyKey.swift b/Modules/Sources/APIClient/DependencyKey.swift index b55597e..70f3748 100644 --- a/Modules/Sources/APIClient/DependencyKey.swift +++ b/Modules/Sources/APIClient/DependencyKey.swift @@ -13,6 +13,10 @@ extension APIClient: TestDependencyKey { public static var testValue: APIClient { .failing } + + public static var previewValue: APIClient { + .mock + } } public extension DependencyValues { diff --git a/Modules/Sources/APIClient/Mocks.swift b/Modules/Sources/APIClient/Mocks.swift index 797a82d..afe4928 100644 --- a/Modules/Sources/APIClient/Mocks.swift +++ b/Modules/Sources/APIClient/Mocks.swift @@ -14,7 +14,7 @@ extension APIClient { authenticate: { _, _ in .mock }, fetchExampleProducts: { .mocks(5) }, setBaseURL: { _ in }, - currentBaseURL: { URL.init(string: ":")! }, - tokensUpdateStream: .init(unfolding: { .none }) + currentBaseURL: { URL(string: ":")! }, + tokensUpdateStream: { .init(unfolding: { .none }) } ) } diff --git a/Modules/Sources/AppVersion/DependencyKey.swift b/Modules/Sources/AppVersion/DependencyKey.swift index a004b43..81c9be9 100644 --- a/Modules/Sources/AppVersion/DependencyKey.swift +++ b/Modules/Sources/AppVersion/DependencyKey.swift @@ -12,6 +12,10 @@ extension AppVersion: TestDependencyKey { public static var testValue: AppVersion { .failing } + + public static var previewValue: AppVersion { + .mock + } } extension DependencyValues { diff --git a/Modules/Sources/LoginFeature/LoginView.swift b/Modules/Sources/LoginFeature/LoginView.swift index 0cc62b7..ffe1633 100644 --- a/Modules/Sources/LoginFeature/LoginView.swift +++ b/Modules/Sources/LoginFeature/LoginView.swift @@ -12,6 +12,12 @@ import SwiftUI import SwiftUINavigation public struct LoginView: View { + + enum FocueField: Hashable { + case email, password + } + + @FocusState var focusField: FocueField? @ObservedObject var viewModel: LoginViewModel @EnvironmentObject var localizations: ObservableLocalizations @@ -34,10 +40,14 @@ public struct LoginView: View { .font(.label2) TextField( localizations.login.emailHeader, - text: $viewModel.email, + text: .init( + get: { viewModel.email }, + set: viewModel.emailChanged(_:) + ), prompt: Text(localizations.login.emailPlaceholder) ) + .focused($focusField, equals: .email) .font(.paragraph) .padding() @@ -51,9 +61,13 @@ public struct LoginView: View { .font(.label2) TextField( localizations.login.passwordHeader, - text: $viewModel.password, + text: .init( + get: { viewModel.password }, + set: viewModel.passwordChanged(_:) + ), prompt: Text(localizations.login.passwordPlaceholder) ) + .focused($focusField, equals: .password) .font(.paragraph) .padding() .overlay( @@ -91,6 +105,8 @@ public struct LoginView: View { DeveloperScreen() } .alert(unwrapping: $viewModel.route, case: /LoginViewModel.Route.alert) + .onAppear(perform: viewModel.onAppear) + .bind($viewModel.focusState, to: $focusField) } } diff --git a/Modules/Sources/LoginFeature/LoginViewModel.swift b/Modules/Sources/LoginFeature/LoginViewModel.swift index b7e0b26..bdee980 100644 --- a/Modules/Sources/LoginFeature/LoginViewModel.swift +++ b/Modules/Sources/LoginFeature/LoginViewModel.swift @@ -29,6 +29,7 @@ public class LoginViewModel: ObservableObject { @Published var password: String = "" @Published var appVersionString: String = "" @Published var isAPICallInFlight = false + @Published var focusState: LoginView.FocueField? var loginCancellable: AnyCancellable? var cancellables: Set = [] @@ -42,8 +43,23 @@ public class LoginViewModel: ObservableObject { /// Simple heuristics for email pattern var isButtonEnabled: Bool { - email.contains("@") && email.contains(".") && email.count >= 6 - && !password.isEmpty && !isAPICallInFlight + email.contains("@") + && email.contains(".") + && email.count >= 6 + && !password.isEmpty + && !isAPICallInFlight + } + + func onAppear() { + focusState = .email + } + + func emailChanged(_ text: String) { + email = text + } + + func passwordChanged(_ text: String) { + password = text } func loginButtonTapped() { @@ -70,30 +86,6 @@ public class LoginViewModel: ObservableObject { } isAPICallInFlight = false } -// loginCancellable = environment.apiClient.authenticate( -// Username(rawValue: email.trimmingCharacters(in: .whitespacesAndNewlines)), -// Password(rawValue: password.trimmingCharacters(in: .whitespacesAndNewlines)) -// ) -// .receive(on: environment.mainQueue, options: nil) -// .sink( -// receiveCompletion: { [weak self, environment] in -// if case .failure(let error) = $0 { -// self?.route = .alert( -// .withTitleAndMessage( -// title: environment.localizations.error.errorTitle, -// message: error.errorCode == "401" -// ? environment.localizations.login.errorInvalidCredentials -// : environment.localizations.error.serverError, -// action1: .primary( -// title: environment.localizations.defaultSection.ok.uppercased(), -// action: { self?.route = nil }) -// ) -// ) -// } -// self?.isAPICallInFlight = false -// }, -// receiveValue: { [unowned self] in onSuccess($0, .init(rawValue: email)) } -// ) } } diff --git a/Modules/Tests/LoginFeatureTests/LoginFeatureTests.swift b/Modules/Tests/LoginFeatureTests/LoginFeatureTests.swift index 92713d3..8c2de42 100644 --- a/Modules/Tests/LoginFeatureTests/LoginFeatureTests.swift +++ b/Modules/Tests/LoginFeatureTests/LoginFeatureTests.swift @@ -5,11 +5,57 @@ // Created by Jakob Mygind on 09/12/2021. // +import Dependencies import Foundation +import Model import XCTest @testable import LoginFeature final class LoginFeatureTests: XCTestCase { - + func testLoginSuccess() async throws { + + var successCalls: [(APITokensEnvelope, Username)] = [] + + let model = withDependencies { + $0.appVersion = .init(version: { "version" }, build: { "build" }) + $0.apiClient.tokensUpdateStream = { .finished } + $0.apiClient.authenticate = { _, _ in + .mock + } + } operation: { + LoginViewModel(onSuccess: { + successCalls.append(($0, $1)) + }) + } + + model.onAppear() + XCTAssertEqual(model.focusState, .email) + XCTAssertEqual(model.appVersionString, "version(build)") + + model.emailChanged("Hej") + XCTAssertFalse(model.isButtonEnabled) + model.emailChanged("Hej@hop") + + XCTAssertFalse(model.isButtonEnabled) + model.emailChanged("Hej@hop.dk") + XCTAssertFalse(model.isButtonEnabled) + + model.passwordChanged("12345") + XCTAssertTrue(model.isButtonEnabled) + + model.loginButtonTapped() + + XCTAssertTrue(model.isAPICallInFlight) + await Task.yield() + XCTAssertFalse(model.isAPICallInFlight) + + XCTAssertEqual(successCalls.count, 1) + let successCall = try XCTUnwrap(successCalls.first) + + XCTAssertEqual(successCall.0, APITokensEnvelope.mock) + XCTAssertEqual(successCall.1, Username("Hej@hop.dk")) + + + } } From 31acc62a14af591cbc5e14a4a4076f1dca2662e1 Mon Sep 17 00:00:00 2001 From: Jakob Mygind Date: Tue, 7 Feb 2023 14:08:24 +0100 Subject: [PATCH 08/10] chore: Make template use remote TokenHandler package --- App/APITokensProtocolConformance.swift | 2 +- App/LiveDependencies.swift | 2 +- Modules/Package.swift | 28 +- Modules/Sources/APIClientLive/Client.swift | 4 +- .../APIClientLive/RequestBuilders.swift | 60 +- Modules/Sources/AppFeature/AppViewModel.swift | 2 +- .../Sources/Localizations/Localizations.swift | 1186 ++++++++--------- .../APITokensEnvelopeProtocol.swift | 25 - .../AuthenticationhandlerAsync.swift | 158 --- Modules/Sources/TokenHandler/JWT.swift | 31 - Modules/Tests/TokenHandlerTests/Models.swift | 48 - .../TokenHandlerTests/TokenHandlerTests.swift | 330 ----- .../xcshareddata/swiftpm/Package.resolved | 9 + .../xcschemes/PROJECT_NAME.xcscheme | 30 + 14 files changed, 654 insertions(+), 1261 deletions(-) delete mode 100644 Modules/Sources/TokenHandler/APITokensEnvelopeProtocol.swift delete mode 100644 Modules/Sources/TokenHandler/AuthenticationhandlerAsync.swift delete mode 100644 Modules/Sources/TokenHandler/JWT.swift delete mode 100644 Modules/Tests/TokenHandlerTests/Models.swift delete mode 100644 Modules/Tests/TokenHandlerTests/TokenHandlerTests.swift diff --git a/App/APITokensProtocolConformance.swift b/App/APITokensProtocolConformance.swift index 18bfe4c..c4280ea 100644 --- a/App/APITokensProtocolConformance.swift +++ b/App/APITokensProtocolConformance.swift @@ -5,7 +5,7 @@ // Created by Jakob Mygind on 30/01/2023. // -import TokenHandler +import MLTokenHandler import Model import Foundation diff --git a/App/LiveDependencies.swift b/App/LiveDependencies.swift index d5c4009..65b1c25 100644 --- a/App/LiveDependencies.swift +++ b/App/LiveDependencies.swift @@ -15,7 +15,7 @@ import Model import NetworkClient import NStackSDK import PersistenceClient -import TokenHandler +import MLTokenHandler extension APIClient: DependencyKey { public static var liveValue: APIClient { diff --git a/Modules/Package.swift b/Modules/Package.swift index ce3b34a..ee776b9 100644 --- a/Modules/Package.swift +++ b/Modules/Package.swift @@ -23,7 +23,7 @@ let package = Package( .library(name: "NetworkClient", targets: ["NetworkClient"]), .library(name: "PersistenceClient", targets: ["PersistenceClient"]), .library(name: "Style", targets: ["Style"]), - .library(name: "TokenHandler", targets: ["TokenHandler"]), +// .library(name: "TokenHandler", targets: ["TokenHandler"]), ], dependencies: [ .package(url: "https://github.com/pointfreeco/swift-tagged", from: "0.6.0"), @@ -33,6 +33,7 @@ let package = Package( .package(url: "https://github.com/pointfreeco/xctest-dynamic-overlay", from: "0.3.1"), .package(url: "https://github.com/pointfreeco/swift-dependencies", from: "0.1.4"), .package(url: "https://github.com/nstack-io/nstack-ios-sdk", branch: "feature/spm-support"), + .package(url: "https://github.com/nodes-ios/MLTokenHandler-ios.git", from: "0.9.0"), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. @@ -48,7 +49,10 @@ let package = Package( ), .target( name: "APIClientLive", - dependencies: ["APIClient", "Model", "TokenHandler"], + dependencies: [ + "APIClient", "Model", + .product(name: "MLTokenHandler", package: "MLTokenHandler-ios"), + ], resources: [] ), .testTarget( @@ -156,15 +160,15 @@ let package = Package( ], resources: [.process("Colors.xcassets"), .process("Fonts")] ), - .target( - name: "TokenHandler", - dependencies: [], - resources: [] - ), - .testTarget( - name: "TokenHandlerTests", - dependencies: [ - "TokenHandler", - ]), +// .target( +// name: "TokenHandler", +// dependencies: [], +// resources: [] +// ), +// .testTarget( +// name: "TokenHandlerTests", +// dependencies: [ +// "TokenHandler", +// ]), ] ) diff --git a/Modules/Sources/APIClientLive/Client.swift b/Modules/Sources/APIClientLive/Client.swift index baa59e6..7999edb 100644 --- a/Modules/Sources/APIClientLive/Client.swift +++ b/Modules/Sources/APIClientLive/Client.swift @@ -9,7 +9,7 @@ import APIClient import Combine import Foundation import Model -import TokenHandler +import MLTokenHandler import XCTestDynamicOverlay extension APIClient { @@ -36,7 +36,7 @@ extension APIClient { }, setBaseURL: { baseURL = $0 }, currentBaseURL: { baseURL }, - tokensUpdateStream: tokensUpdateStream + tokensUpdateStream: { tokensUpdateStream } ) } } diff --git a/Modules/Sources/APIClientLive/RequestBuilders.swift b/Modules/Sources/APIClientLive/RequestBuilders.swift index 782b63f..f4ff98c 100644 --- a/Modules/Sources/APIClientLive/RequestBuilders.swift +++ b/Modules/Sources/APIClientLive/RequestBuilders.swift @@ -7,7 +7,7 @@ import Combine import Foundation import Model -import TokenHandler +import MLTokenHandler /// Type erasing wrapper used bc enum cases cannot be generic struct AnyEncodable: Encodable { @@ -21,64 +21,6 @@ struct AnyEncodable: Encodable { } } -extension URLRequest { - func authenticateAndPerform(using handler: AuthenticationHandlerAsync) async throws -> Value { - do { - let data = try await handler.performAuthenticatedRequest(self) - } catch { - - } - } -} - -func apiDecode( - as type: A.Type, - file: StaticString = #file, - line: UInt = #line, - jsonDecoder: JSONDecoder = { - let decoder = JSONDecoder() - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS" - decoder.dateDecodingStrategy = .formatted(formatter) - return decoder - }(), - overrideDateFormat: String? = nil, - for request: URLRequest? = nil -) async throws -> A { - self - - .mapError { APIError(error: $0, file: file, line: line) } - .flatMap { data, response -> AnyPublisher in - do { - return try Just(jsonDecoder.decode(A.self, from: data)) - .setFailureType(to: APIError.self) - .eraseToAnyPublisher() - } catch let decodingError { - if let request = request { - debugPrint( - "\(#function) \(decodingError) \ndata: \(String(data: data, encoding: .utf8) ?? "-")\nRequest: \(request)" - ) - } else { - debugPrint( - "\(#function) \(decodingError) \ndata: \(String(data: data, encoding: .utf8) ?? "-")" - ) - } - do { - var decodedError = try jsonDecoder.decode(APIError.self, from: data) - if let code = (response as? HTTPURLResponse)?.statusCode { - decodedError.errorCode = "\(code)" - } - return Fail(error: decodedError) - .eraseToAnyPublisher() - } catch { - return Fail(error: APIError(error: decodingError)).eraseToAnyPublisher() - } - } - } - .eraseToAnyPublisher() -} - func apiRequest(_ method: Method) -> URLRequest { var request: URLRequest diff --git a/Modules/Sources/AppFeature/AppViewModel.swift b/Modules/Sources/AppFeature/AppViewModel.swift index 8e36406..633adc4 100644 --- a/Modules/Sources/AppFeature/AppViewModel.swift +++ b/Modules/Sources/AppFeature/AppViewModel.swift @@ -38,7 +38,7 @@ public class AppViewModel: ObservableObject { self.route = route Task { - for await token in apiClient.tokensUpdateStream { + for await token in apiClient.tokensUpdateStream() { if token == nil { showLogin() } diff --git a/Modules/Sources/Localizations/Localizations.swift b/Modules/Sources/Localizations/Localizations.swift index 6b6e514..d687dc5 100644 --- a/Modules/Sources/Localizations/Localizations.swift +++ b/Modules/Sources/Localizations/Localizations.swift @@ -33,34 +33,34 @@ import NLocalizationManager import LocalizationManager #endif public final class Localizations: LocalizableModel { - public var orderDetailNewOrderSection = OrderDetailNewOrderSection() - public var error = Error() - public var printerOutput = PrinterOutput() - public var searchOrders = SearchOrders() - public var orderStatus = OrderStatus() + public var dashboard = Dashboard() public var deliveryType = DeliveryType() - public var units = Units() + public var error = Error() public var settings = Settings() - public var orderDetails = OrderDetails() + public var units = Units() public var login = Login() - public var dashboard = Dashboard() + public var printerOutput = PrinterOutput() + public var orderDetails = OrderDetails() + public var orderDetailNewOrderSection = OrderDetailNewOrderSection() public var defaultSection = DefaultSection() public var printer = Printer() + public var orderStatus = OrderStatus() + public var searchOrders = SearchOrders() enum CodingKeys: String, CodingKey { - case orderDetailNewOrderSection - case error - case printerOutput - case searchOrders - case orderStatus + case dashboard case deliveryType - case units + case error case settings - case orderDetails + case units case login - case dashboard + case printerOutput + case orderDetails + case orderDetailNewOrderSection case defaultSection = "default" case printer + case orderStatus + case searchOrders } public override init() { super.init() } @@ -68,61 +68,75 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - orderDetailNewOrderSection = try container.decodeIfPresent(OrderDetailNewOrderSection.self, forKey: .orderDetailNewOrderSection) ?? orderDetailNewOrderSection - error = try container.decodeIfPresent(Error.self, forKey: .error) ?? error - printerOutput = try container.decodeIfPresent(PrinterOutput.self, forKey: .printerOutput) ?? printerOutput - searchOrders = try container.decodeIfPresent(SearchOrders.self, forKey: .searchOrders) ?? searchOrders - orderStatus = try container.decodeIfPresent(OrderStatus.self, forKey: .orderStatus) ?? orderStatus + dashboard = try container.decodeIfPresent(Dashboard.self, forKey: .dashboard) ?? dashboard deliveryType = try container.decodeIfPresent(DeliveryType.self, forKey: .deliveryType) ?? deliveryType - units = try container.decodeIfPresent(Units.self, forKey: .units) ?? units + error = try container.decodeIfPresent(Error.self, forKey: .error) ?? error settings = try container.decodeIfPresent(Settings.self, forKey: .settings) ?? settings - orderDetails = try container.decodeIfPresent(OrderDetails.self, forKey: .orderDetails) ?? orderDetails + units = try container.decodeIfPresent(Units.self, forKey: .units) ?? units login = try container.decodeIfPresent(Login.self, forKey: .login) ?? login - dashboard = try container.decodeIfPresent(Dashboard.self, forKey: .dashboard) ?? dashboard + printerOutput = try container.decodeIfPresent(PrinterOutput.self, forKey: .printerOutput) ?? printerOutput + orderDetails = try container.decodeIfPresent(OrderDetails.self, forKey: .orderDetails) ?? orderDetails + orderDetailNewOrderSection = try container.decodeIfPresent(OrderDetailNewOrderSection.self, forKey: .orderDetailNewOrderSection) ?? orderDetailNewOrderSection defaultSection = try container.decodeIfPresent(DefaultSection.self, forKey: .defaultSection) ?? defaultSection printer = try container.decodeIfPresent(Printer.self, forKey: .printer) ?? printer + orderStatus = try container.decodeIfPresent(OrderStatus.self, forKey: .orderStatus) ?? orderStatus + searchOrders = try container.decodeIfPresent(SearchOrders.self, forKey: .searchOrders) ?? searchOrders } public override subscript(key: String) -> LocalizableSection? { switch key { - case CodingKeys.orderDetailNewOrderSection.stringValue: return orderDetailNewOrderSection - case CodingKeys.error.stringValue: return error - case CodingKeys.printerOutput.stringValue: return printerOutput - case CodingKeys.searchOrders.stringValue: return searchOrders - case CodingKeys.orderStatus.stringValue: return orderStatus + case CodingKeys.dashboard.stringValue: return dashboard case CodingKeys.deliveryType.stringValue: return deliveryType - case CodingKeys.units.stringValue: return units + case CodingKeys.error.stringValue: return error case CodingKeys.settings.stringValue: return settings - case CodingKeys.orderDetails.stringValue: return orderDetails + case CodingKeys.units.stringValue: return units case CodingKeys.login.stringValue: return login - case CodingKeys.dashboard.stringValue: return dashboard + case CodingKeys.printerOutput.stringValue: return printerOutput + case CodingKeys.orderDetails.stringValue: return orderDetails + case CodingKeys.orderDetailNewOrderSection.stringValue: return orderDetailNewOrderSection case CodingKeys.defaultSection.stringValue: return defaultSection case CodingKeys.printer.stringValue: return printer + case CodingKeys.orderStatus.stringValue: return orderStatus + case CodingKeys.searchOrders.stringValue: return searchOrders default: return nil } } - public final class OrderDetailNewOrderSection: LocalizableSection { - public var rejectButton = "" - public var pickedUpInStoreAt = "" - public var acceptButton = "" - public var pickupTimeHeader = "" - public var customerNameHeader = "" - public var phoneNumberHeader = "" - public var header = "" - public var deliveryTimeHeader = "" - public var subheader = "" + public final class Dashboard: LocalizableSection { + public var itemsPlural = "" + public var columnIncoming = "" + public var columnAccepted = "" + public var sectionToday = "" + public var columnAcceptedEmpty = "" + public var columnDoneToday = "" + public var allOrdersButton = "" + public var columnReady = "" + public var columnIncomingEmpty = "" + public var columnOutForDeliveryEmpty = "" + public var sectionLater = "" + public var itemsSingular = "" + public var columnDoneTodayEmpty = "" + public var columnReadyEmpty = "" + public var columnOutForDelivery = "" + public var sectionTomorrow = "" enum CodingKeys: String, CodingKey { - case rejectButton - case pickedUpInStoreAt - case acceptButton - case pickupTimeHeader - case customerNameHeader - case phoneNumberHeader - case header - case deliveryTimeHeader - case subheader + case itemsPlural + case columnIncoming + case columnAccepted + case sectionToday + case columnAcceptedEmpty + case columnDoneToday + case allOrdersButton + case columnReady + case columnIncomingEmpty + case columnOutForDeliveryEmpty + case sectionLater + case itemsSingular + case columnDoneTodayEmpty + case columnReadyEmpty + case columnOutForDelivery + case sectionTomorrow } public override init() { super.init() } @@ -130,46 +144,87 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" - pickedUpInStoreAt = try container.decodeIfPresent(String.self, forKey: .pickedUpInStoreAt) ?? "__pickedUpInStoreAt" - acceptButton = try container.decodeIfPresent(String.self, forKey: .acceptButton) ?? "__acceptButton" - pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" - customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" - phoneNumberHeader = try container.decodeIfPresent(String.self, forKey: .phoneNumberHeader) ?? "__phoneNumberHeader" - header = try container.decodeIfPresent(String.self, forKey: .header) ?? "__header" - deliveryTimeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTimeHeader) ?? "__deliveryTimeHeader" - subheader = try container.decodeIfPresent(String.self, forKey: .subheader) ?? "__subheader" + itemsPlural = try container.decodeIfPresent(String.self, forKey: .itemsPlural) ?? "__itemsPlural" + columnIncoming = try container.decodeIfPresent(String.self, forKey: .columnIncoming) ?? "__columnIncoming" + columnAccepted = try container.decodeIfPresent(String.self, forKey: .columnAccepted) ?? "__columnAccepted" + sectionToday = try container.decodeIfPresent(String.self, forKey: .sectionToday) ?? "__sectionToday" + columnAcceptedEmpty = try container.decodeIfPresent(String.self, forKey: .columnAcceptedEmpty) ?? "__columnAcceptedEmpty" + columnDoneToday = try container.decodeIfPresent(String.self, forKey: .columnDoneToday) ?? "__columnDoneToday" + allOrdersButton = try container.decodeIfPresent(String.self, forKey: .allOrdersButton) ?? "__allOrdersButton" + columnReady = try container.decodeIfPresent(String.self, forKey: .columnReady) ?? "__columnReady" + columnIncomingEmpty = try container.decodeIfPresent(String.self, forKey: .columnIncomingEmpty) ?? "__columnIncomingEmpty" + columnOutForDeliveryEmpty = try container.decodeIfPresent(String.self, forKey: .columnOutForDeliveryEmpty) ?? "__columnOutForDeliveryEmpty" + sectionLater = try container.decodeIfPresent(String.self, forKey: .sectionLater) ?? "__sectionLater" + itemsSingular = try container.decodeIfPresent(String.self, forKey: .itemsSingular) ?? "__itemsSingular" + columnDoneTodayEmpty = try container.decodeIfPresent(String.self, forKey: .columnDoneTodayEmpty) ?? "__columnDoneTodayEmpty" + columnReadyEmpty = try container.decodeIfPresent(String.self, forKey: .columnReadyEmpty) ?? "__columnReadyEmpty" + columnOutForDelivery = try container.decodeIfPresent(String.self, forKey: .columnOutForDelivery) ?? "__columnOutForDelivery" + sectionTomorrow = try container.decodeIfPresent(String.self, forKey: .sectionTomorrow) ?? "__sectionTomorrow" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.rejectButton.stringValue: return rejectButton - case CodingKeys.pickedUpInStoreAt.stringValue: return pickedUpInStoreAt - case CodingKeys.acceptButton.stringValue: return acceptButton - case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader - case CodingKeys.customerNameHeader.stringValue: return customerNameHeader - case CodingKeys.phoneNumberHeader.stringValue: return phoneNumberHeader - case CodingKeys.header.stringValue: return header - case CodingKeys.deliveryTimeHeader.stringValue: return deliveryTimeHeader - case CodingKeys.subheader.stringValue: return subheader + case CodingKeys.itemsPlural.stringValue: return itemsPlural + case CodingKeys.columnIncoming.stringValue: return columnIncoming + case CodingKeys.columnAccepted.stringValue: return columnAccepted + case CodingKeys.sectionToday.stringValue: return sectionToday + case CodingKeys.columnAcceptedEmpty.stringValue: return columnAcceptedEmpty + case CodingKeys.columnDoneToday.stringValue: return columnDoneToday + case CodingKeys.allOrdersButton.stringValue: return allOrdersButton + case CodingKeys.columnReady.stringValue: return columnReady + case CodingKeys.columnIncomingEmpty.stringValue: return columnIncomingEmpty + case CodingKeys.columnOutForDeliveryEmpty.stringValue: return columnOutForDeliveryEmpty + case CodingKeys.sectionLater.stringValue: return sectionLater + case CodingKeys.itemsSingular.stringValue: return itemsSingular + case CodingKeys.columnDoneTodayEmpty.stringValue: return columnDoneTodayEmpty + case CodingKeys.columnReadyEmpty.stringValue: return columnReadyEmpty + case CodingKeys.columnOutForDelivery.stringValue: return columnOutForDelivery + case CodingKeys.sectionTomorrow.stringValue: return sectionTomorrow + default: return nil + } + } + } + + public final class DeliveryType: LocalizableSection { + public var collect = "" + public var delivery = "" + + enum CodingKeys: String, CodingKey { + case collect + case delivery + } + + public override init() { super.init() } + + public required init(from decoder: Decoder) throws { + super.init() + let container = try decoder.container(keyedBy: CodingKeys.self) + collect = try container.decodeIfPresent(String.self, forKey: .collect) ?? "__collect" + delivery = try container.decodeIfPresent(String.self, forKey: .delivery) ?? "__delivery" + } + + public override subscript(key: String) -> String? { + switch key { + case CodingKeys.collect.stringValue: return collect + case CodingKeys.delivery.stringValue: return delivery default: return nil } } } public final class Error: LocalizableSection { + public var connectionError = "" public var unknownError = "" - public var authenticationError = "" public var serverError = "" public var errorTitle = "" - public var connectionError = "" + public var authenticationError = "" enum CodingKeys: String, CodingKey { + case connectionError case unknownError - case authenticationError case serverError case errorTitle - case connectionError + case authenticationError } public override init() { super.init() } @@ -177,44 +232,50 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) + connectionError = try container.decodeIfPresent(String.self, forKey: .connectionError) ?? "__connectionError" unknownError = try container.decodeIfPresent(String.self, forKey: .unknownError) ?? "__unknownError" - authenticationError = try container.decodeIfPresent(String.self, forKey: .authenticationError) ?? "__authenticationError" serverError = try container.decodeIfPresent(String.self, forKey: .serverError) ?? "__serverError" errorTitle = try container.decodeIfPresent(String.self, forKey: .errorTitle) ?? "__errorTitle" - connectionError = try container.decodeIfPresent(String.self, forKey: .connectionError) ?? "__connectionError" + authenticationError = try container.decodeIfPresent(String.self, forKey: .authenticationError) ?? "__authenticationError" } public override subscript(key: String) -> String? { switch key { + case CodingKeys.connectionError.stringValue: return connectionError case CodingKeys.unknownError.stringValue: return unknownError - case CodingKeys.authenticationError.stringValue: return authenticationError case CodingKeys.serverError.stringValue: return serverError case CodingKeys.errorTitle.stringValue: return errorTitle - case CodingKeys.connectionError.stringValue: return connectionError + case CodingKeys.authenticationError.stringValue: return authenticationError default: return nil } } } - public final class PrinterOutput: LocalizableSection { - public var noteHeader = "" - public var otherHeader = "" - public var errorDeviceConnectionFailed = "" - public var warmHeader = "" - public var coldHeader = "" - public var includeCutlery = "" - public var orderNumber = "" - public var errorNoDeviceFound = "" + public final class Settings: LocalizableSection { + public var title = "" + public var logOutButton = "" + public var usernameHeader = "" + public var logOutAlertCancel = "" + public var logOutAlertConfirm = "" + public var printerHeader = "" + public var closeButton = "" + public var appVersionHeader = "" + public var logoutAlertTitle = "" + public var selectPrinterButton = "" + public var logOutAlertMessage = "" enum CodingKeys: String, CodingKey { - case noteHeader - case otherHeader - case errorDeviceConnectionFailed - case warmHeader - case coldHeader - case includeCutlery - case orderNumber - case errorNoDeviceFound + case title + case logOutButton + case usernameHeader + case logOutAlertCancel + case logOutAlertConfirm + case printerHeader + case closeButton + case appVersionHeader + case logoutAlertTitle + case selectPrinterButton + case logOutAlertMessage } public override init() { super.init() } @@ -222,60 +283,60 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - noteHeader = try container.decodeIfPresent(String.self, forKey: .noteHeader) ?? "__noteHeader" - otherHeader = try container.decodeIfPresent(String.self, forKey: .otherHeader) ?? "__otherHeader" - errorDeviceConnectionFailed = try container.decodeIfPresent(String.self, forKey: .errorDeviceConnectionFailed) ?? "__errorDeviceConnectionFailed" - warmHeader = try container.decodeIfPresent(String.self, forKey: .warmHeader) ?? "__warmHeader" - coldHeader = try container.decodeIfPresent(String.self, forKey: .coldHeader) ?? "__coldHeader" - includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" - orderNumber = try container.decodeIfPresent(String.self, forKey: .orderNumber) ?? "__orderNumber" - errorNoDeviceFound = try container.decodeIfPresent(String.self, forKey: .errorNoDeviceFound) ?? "__errorNoDeviceFound" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + logOutButton = try container.decodeIfPresent(String.self, forKey: .logOutButton) ?? "__logOutButton" + usernameHeader = try container.decodeIfPresent(String.self, forKey: .usernameHeader) ?? "__usernameHeader" + logOutAlertCancel = try container.decodeIfPresent(String.self, forKey: .logOutAlertCancel) ?? "__logOutAlertCancel" + logOutAlertConfirm = try container.decodeIfPresent(String.self, forKey: .logOutAlertConfirm) ?? "__logOutAlertConfirm" + printerHeader = try container.decodeIfPresent(String.self, forKey: .printerHeader) ?? "__printerHeader" + closeButton = try container.decodeIfPresent(String.self, forKey: .closeButton) ?? "__closeButton" + appVersionHeader = try container.decodeIfPresent(String.self, forKey: .appVersionHeader) ?? "__appVersionHeader" + logoutAlertTitle = try container.decodeIfPresent(String.self, forKey: .logoutAlertTitle) ?? "__logoutAlertTitle" + selectPrinterButton = try container.decodeIfPresent(String.self, forKey: .selectPrinterButton) ?? "__selectPrinterButton" + logOutAlertMessage = try container.decodeIfPresent(String.self, forKey: .logOutAlertMessage) ?? "__logOutAlertMessage" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.noteHeader.stringValue: return noteHeader - case CodingKeys.otherHeader.stringValue: return otherHeader - case CodingKeys.errorDeviceConnectionFailed.stringValue: return errorDeviceConnectionFailed - case CodingKeys.warmHeader.stringValue: return warmHeader - case CodingKeys.coldHeader.stringValue: return coldHeader - case CodingKeys.includeCutlery.stringValue: return includeCutlery - case CodingKeys.orderNumber.stringValue: return orderNumber - case CodingKeys.errorNoDeviceFound.stringValue: return errorNoDeviceFound + case CodingKeys.title.stringValue: return title + case CodingKeys.logOutButton.stringValue: return logOutButton + case CodingKeys.usernameHeader.stringValue: return usernameHeader + case CodingKeys.logOutAlertCancel.stringValue: return logOutAlertCancel + case CodingKeys.logOutAlertConfirm.stringValue: return logOutAlertConfirm + case CodingKeys.printerHeader.stringValue: return printerHeader + case CodingKeys.closeButton.stringValue: return closeButton + case CodingKeys.appVersionHeader.stringValue: return appVersionHeader + case CodingKeys.logoutAlertTitle.stringValue: return logoutAlertTitle + case CodingKeys.selectPrinterButton.stringValue: return selectPrinterButton + case CodingKeys.logOutAlertMessage.stringValue: return logOutAlertMessage default: return nil } } } - public final class SearchOrders: LocalizableSection { - public var orderStatusHeader = "" - public var searchfieldPlaceholder = "" - public var orderNumberHeader = "" - public var customerNameHeader = "" - public var title = "" - public var statusReady = "" - public var statusCompleted = "" - public var statusShipped = "" - public var orderDateHeader = "" - public var statusAccepted = "" - public var emptyMessage = "" - public var statusRejected = "" - public var statusNew = "" + public final class Units: LocalizableSection { + public var grm = "" + public var e14 = "" + public var dlt = "" + public var mlt = "" + public var cmt = "" + public var clt = "" + public var kgm = "" + public var d70 = "" + public var ltr = "" + public var h87 = "" enum CodingKeys: String, CodingKey { - case orderStatusHeader - case searchfieldPlaceholder - case orderNumberHeader - case customerNameHeader - case title - case statusReady - case statusCompleted - case statusShipped - case orderDateHeader - case statusAccepted - case emptyMessage - case statusRejected - case statusNew + case grm + case e14 + case dlt + case mlt + case cmt + case clt + case kgm + case d70 + case ltr + case h87 } public override init() { super.init() } @@ -283,46 +344,58 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - orderStatusHeader = try container.decodeIfPresent(String.self, forKey: .orderStatusHeader) ?? "__orderStatusHeader" - searchfieldPlaceholder = try container.decodeIfPresent(String.self, forKey: .searchfieldPlaceholder) ?? "__searchfieldPlaceholder" - orderNumberHeader = try container.decodeIfPresent(String.self, forKey: .orderNumberHeader) ?? "__orderNumberHeader" - customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - statusReady = try container.decodeIfPresent(String.self, forKey: .statusReady) ?? "__statusReady" - statusCompleted = try container.decodeIfPresent(String.self, forKey: .statusCompleted) ?? "__statusCompleted" - statusShipped = try container.decodeIfPresent(String.self, forKey: .statusShipped) ?? "__statusShipped" - orderDateHeader = try container.decodeIfPresent(String.self, forKey: .orderDateHeader) ?? "__orderDateHeader" - statusAccepted = try container.decodeIfPresent(String.self, forKey: .statusAccepted) ?? "__statusAccepted" - emptyMessage = try container.decodeIfPresent(String.self, forKey: .emptyMessage) ?? "__emptyMessage" - statusRejected = try container.decodeIfPresent(String.self, forKey: .statusRejected) ?? "__statusRejected" - statusNew = try container.decodeIfPresent(String.self, forKey: .statusNew) ?? "__statusNew" + grm = try container.decodeIfPresent(String.self, forKey: .grm) ?? "__grm" + e14 = try container.decodeIfPresent(String.self, forKey: .e14) ?? "__e14" + dlt = try container.decodeIfPresent(String.self, forKey: .dlt) ?? "__dlt" + mlt = try container.decodeIfPresent(String.self, forKey: .mlt) ?? "__mlt" + cmt = try container.decodeIfPresent(String.self, forKey: .cmt) ?? "__cmt" + clt = try container.decodeIfPresent(String.self, forKey: .clt) ?? "__clt" + kgm = try container.decodeIfPresent(String.self, forKey: .kgm) ?? "__kgm" + d70 = try container.decodeIfPresent(String.self, forKey: .d70) ?? "__d70" + ltr = try container.decodeIfPresent(String.self, forKey: .ltr) ?? "__ltr" + h87 = try container.decodeIfPresent(String.self, forKey: .h87) ?? "__h87" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.orderStatusHeader.stringValue: return orderStatusHeader - case CodingKeys.searchfieldPlaceholder.stringValue: return searchfieldPlaceholder - case CodingKeys.orderNumberHeader.stringValue: return orderNumberHeader - case CodingKeys.customerNameHeader.stringValue: return customerNameHeader - case CodingKeys.title.stringValue: return title - case CodingKeys.statusReady.stringValue: return statusReady - case CodingKeys.statusCompleted.stringValue: return statusCompleted - case CodingKeys.statusShipped.stringValue: return statusShipped - case CodingKeys.orderDateHeader.stringValue: return orderDateHeader - case CodingKeys.statusAccepted.stringValue: return statusAccepted - case CodingKeys.emptyMessage.stringValue: return emptyMessage - case CodingKeys.statusRejected.stringValue: return statusRejected - case CodingKeys.statusNew.stringValue: return statusNew + case CodingKeys.grm.stringValue: return grm + case CodingKeys.e14.stringValue: return e14 + case CodingKeys.dlt.stringValue: return dlt + case CodingKeys.mlt.stringValue: return mlt + case CodingKeys.cmt.stringValue: return cmt + case CodingKeys.clt.stringValue: return clt + case CodingKeys.kgm.stringValue: return kgm + case CodingKeys.d70.stringValue: return d70 + case CodingKeys.ltr.stringValue: return ltr + case CodingKeys.h87.stringValue: return h87 default: return nil } } } - public final class OrderStatus: LocalizableSection { - public var accepted = "" + public final class Login: LocalizableSection { + public var emailPlaceholder = "" + public var title = "" + public var emailHeader = "" + public var errorInvalidCredentials = "" + public var resetPasswordMessage = "" + public var loginButton = "" + public var passwordPlaceholder = "" + public var passwordHeader = "" + public var appVersionPrefix = "" + public var appName = "" enum CodingKeys: String, CodingKey { - case accepted + case emailPlaceholder + case title + case emailHeader + case errorInvalidCredentials + case resetPasswordMessage + case loginButton + case passwordPlaceholder + case passwordHeader + case appVersionPrefix + case appName } public override init() { super.init() } @@ -330,24 +403,54 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - accepted = try container.decodeIfPresent(String.self, forKey: .accepted) ?? "__accepted" + emailPlaceholder = try container.decodeIfPresent(String.self, forKey: .emailPlaceholder) ?? "__emailPlaceholder" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + emailHeader = try container.decodeIfPresent(String.self, forKey: .emailHeader) ?? "__emailHeader" + errorInvalidCredentials = try container.decodeIfPresent(String.self, forKey: .errorInvalidCredentials) ?? "__errorInvalidCredentials" + resetPasswordMessage = try container.decodeIfPresent(String.self, forKey: .resetPasswordMessage) ?? "__resetPasswordMessage" + loginButton = try container.decodeIfPresent(String.self, forKey: .loginButton) ?? "__loginButton" + passwordPlaceholder = try container.decodeIfPresent(String.self, forKey: .passwordPlaceholder) ?? "__passwordPlaceholder" + passwordHeader = try container.decodeIfPresent(String.self, forKey: .passwordHeader) ?? "__passwordHeader" + appVersionPrefix = try container.decodeIfPresent(String.self, forKey: .appVersionPrefix) ?? "__appVersionPrefix" + appName = try container.decodeIfPresent(String.self, forKey: .appName) ?? "__appName" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.accepted.stringValue: return accepted + case CodingKeys.emailPlaceholder.stringValue: return emailPlaceholder + case CodingKeys.title.stringValue: return title + case CodingKeys.emailHeader.stringValue: return emailHeader + case CodingKeys.errorInvalidCredentials.stringValue: return errorInvalidCredentials + case CodingKeys.resetPasswordMessage.stringValue: return resetPasswordMessage + case CodingKeys.loginButton.stringValue: return loginButton + case CodingKeys.passwordPlaceholder.stringValue: return passwordPlaceholder + case CodingKeys.passwordHeader.stringValue: return passwordHeader + case CodingKeys.appVersionPrefix.stringValue: return appVersionPrefix + case CodingKeys.appName.stringValue: return appName default: return nil } } } - public final class DeliveryType: LocalizableSection { - public var delivery = "" - public var collect = "" + public final class PrinterOutput: LocalizableSection { + public var otherHeader = "" + public var warmHeader = "" + public var orderNumber = "" + public var errorDeviceConnectionFailed = "" + public var includeCutlery = "" + public var noteHeader = "" + public var errorNoDeviceFound = "" + public var coldHeader = "" enum CodingKeys: String, CodingKey { - case delivery - case collect + case otherHeader + case warmHeader + case orderNumber + case errorDeviceConnectionFailed + case includeCutlery + case noteHeader + case errorNoDeviceFound + case coldHeader } public override init() { super.init() } @@ -355,214 +458,104 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - delivery = try container.decodeIfPresent(String.self, forKey: .delivery) ?? "__delivery" - collect = try container.decodeIfPresent(String.self, forKey: .collect) ?? "__collect" + otherHeader = try container.decodeIfPresent(String.self, forKey: .otherHeader) ?? "__otherHeader" + warmHeader = try container.decodeIfPresent(String.self, forKey: .warmHeader) ?? "__warmHeader" + orderNumber = try container.decodeIfPresent(String.self, forKey: .orderNumber) ?? "__orderNumber" + errorDeviceConnectionFailed = try container.decodeIfPresent(String.self, forKey: .errorDeviceConnectionFailed) ?? "__errorDeviceConnectionFailed" + includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" + noteHeader = try container.decodeIfPresent(String.self, forKey: .noteHeader) ?? "__noteHeader" + errorNoDeviceFound = try container.decodeIfPresent(String.self, forKey: .errorNoDeviceFound) ?? "__errorNoDeviceFound" + coldHeader = try container.decodeIfPresent(String.self, forKey: .coldHeader) ?? "__coldHeader" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.delivery.stringValue: return delivery - case CodingKeys.collect.stringValue: return collect - default: return nil - } - } - } - - public final class Units: LocalizableSection { - public var kgm = "" - public var ltr = "" - public var h87 = "" - public var clt = "" - public var d70 = "" - public var grm = "" - public var e14 = "" - public var dlt = "" - public var cmt = "" - public var mlt = "" - - enum CodingKeys: String, CodingKey { - case kgm - case ltr - case h87 - case clt - case d70 - case grm - case e14 - case dlt - case cmt - case mlt - } - - public override init() { super.init() } - - public required init(from decoder: Decoder) throws { - super.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - kgm = try container.decodeIfPresent(String.self, forKey: .kgm) ?? "__kgm" - ltr = try container.decodeIfPresent(String.self, forKey: .ltr) ?? "__ltr" - h87 = try container.decodeIfPresent(String.self, forKey: .h87) ?? "__h87" - clt = try container.decodeIfPresent(String.self, forKey: .clt) ?? "__clt" - d70 = try container.decodeIfPresent(String.self, forKey: .d70) ?? "__d70" - grm = try container.decodeIfPresent(String.self, forKey: .grm) ?? "__grm" - e14 = try container.decodeIfPresent(String.self, forKey: .e14) ?? "__e14" - dlt = try container.decodeIfPresent(String.self, forKey: .dlt) ?? "__dlt" - cmt = try container.decodeIfPresent(String.self, forKey: .cmt) ?? "__cmt" - mlt = try container.decodeIfPresent(String.self, forKey: .mlt) ?? "__mlt" - } - - public override subscript(key: String) -> String? { - switch key { - case CodingKeys.kgm.stringValue: return kgm - case CodingKeys.ltr.stringValue: return ltr - case CodingKeys.h87.stringValue: return h87 - case CodingKeys.clt.stringValue: return clt - case CodingKeys.d70.stringValue: return d70 - case CodingKeys.grm.stringValue: return grm - case CodingKeys.e14.stringValue: return e14 - case CodingKeys.dlt.stringValue: return dlt - case CodingKeys.cmt.stringValue: return cmt - case CodingKeys.mlt.stringValue: return mlt - default: return nil - } - } - } - - public final class Settings: LocalizableSection { - public var selectPrinterButton = "" - public var logOutAlertMessage = "" - public var printerHeader = "" - public var appVersionHeader = "" - public var usernameHeader = "" - public var logoutAlertTitle = "" - public var logOutAlertCancel = "" - public var logOutAlertConfirm = "" - public var logOutButton = "" - public var closeButton = "" - public var title = "" - - enum CodingKeys: String, CodingKey { - case selectPrinterButton - case logOutAlertMessage - case printerHeader - case appVersionHeader - case usernameHeader - case logoutAlertTitle - case logOutAlertCancel - case logOutAlertConfirm - case logOutButton - case closeButton - case title - } - - public override init() { super.init() } - - public required init(from decoder: Decoder) throws { - super.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - selectPrinterButton = try container.decodeIfPresent(String.self, forKey: .selectPrinterButton) ?? "__selectPrinterButton" - logOutAlertMessage = try container.decodeIfPresent(String.self, forKey: .logOutAlertMessage) ?? "__logOutAlertMessage" - printerHeader = try container.decodeIfPresent(String.self, forKey: .printerHeader) ?? "__printerHeader" - appVersionHeader = try container.decodeIfPresent(String.self, forKey: .appVersionHeader) ?? "__appVersionHeader" - usernameHeader = try container.decodeIfPresent(String.self, forKey: .usernameHeader) ?? "__usernameHeader" - logoutAlertTitle = try container.decodeIfPresent(String.self, forKey: .logoutAlertTitle) ?? "__logoutAlertTitle" - logOutAlertCancel = try container.decodeIfPresent(String.self, forKey: .logOutAlertCancel) ?? "__logOutAlertCancel" - logOutAlertConfirm = try container.decodeIfPresent(String.self, forKey: .logOutAlertConfirm) ?? "__logOutAlertConfirm" - logOutButton = try container.decodeIfPresent(String.self, forKey: .logOutButton) ?? "__logOutButton" - closeButton = try container.decodeIfPresent(String.self, forKey: .closeButton) ?? "__closeButton" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - } - - public override subscript(key: String) -> String? { - switch key { - case CodingKeys.selectPrinterButton.stringValue: return selectPrinterButton - case CodingKeys.logOutAlertMessage.stringValue: return logOutAlertMessage - case CodingKeys.printerHeader.stringValue: return printerHeader - case CodingKeys.appVersionHeader.stringValue: return appVersionHeader - case CodingKeys.usernameHeader.stringValue: return usernameHeader - case CodingKeys.logoutAlertTitle.stringValue: return logoutAlertTitle - case CodingKeys.logOutAlertCancel.stringValue: return logOutAlertCancel - case CodingKeys.logOutAlertConfirm.stringValue: return logOutAlertConfirm - case CodingKeys.logOutButton.stringValue: return logOutButton - case CodingKeys.closeButton.stringValue: return closeButton - case CodingKeys.title.stringValue: return title + case CodingKeys.otherHeader.stringValue: return otherHeader + case CodingKeys.warmHeader.stringValue: return warmHeader + case CodingKeys.orderNumber.stringValue: return orderNumber + case CodingKeys.errorDeviceConnectionFailed.stringValue: return errorDeviceConnectionFailed + case CodingKeys.includeCutlery.stringValue: return includeCutlery + case CodingKeys.noteHeader.stringValue: return noteHeader + case CodingKeys.errorNoDeviceFound.stringValue: return errorNoDeviceFound + case CodingKeys.coldHeader.stringValue: return coldHeader default: return nil } } } public final class OrderDetails: LocalizableSection { + public var infoTakeOutShopID = "" + public var rejectOrderAlertMessage = "" public var pickedUpButton = "" - public var infoAddress = "" - public var sectionHeaderColdProducts = "" public var deliveryTypeHeader = "" - public var infoTakeoutPhone = "" - public var customerNoteHeader = "" + public var completedBanner = "" public var errorStatusUpdateFailed = "" - public var infoDeliveryTime = "" - public var sectionHeaderCustomerInfo = "" - public var sectionHeaderOtherProducts = "" - public var underPreparationButton = "" + public var sectionHeaderWarmProducts = "" public var errorCouldNotFetchProducts = "" - public var infoPaymentType = "" - public var rejectOrderAlertMessage = "" - public var sectionSubheaderColdProducts = "" - public var sectionHeaderOrderStatus = "" + public var sectionHeaderOtherProducts = "" public var includeCutlery = "" - public var readyButton = "" - public var rejectButton = "" - public var sectionHeaderWarmProducts = "" - public var completedBanner = "" - public var outForDeliveryButton = "" - public var aPiece = "" - public var rejectOrderAlertCancel = "" - public var infoEmail = "" - public var infoCustomerName = "" - public var pickupTimeHeader = "" public var today = "" - public var sectionHeaderTakeout = "" - public var rejectOrderAlertConfirm = "" + public var infoCustomerName = "" + public var sectionHeaderOrderStatus = "" + public var rejectButton = "" + public var infoOrderTime = "" + public var sectionHeaderColdProducts = "" public var printButton = "" public var rejectOrderAlertTitle = "" - public var infoOrderTime = "" - public var infoTakeOutShopID = "" + public var infoTakeoutPhone = "" + public var infoEmail = "" + public var infoAddress = "" + public var underPreparationButton = "" + public var rejectOrderAlertConfirm = "" public var infoMobilePhone = "" + public var infoDeliveryTime = "" + public var readyButton = "" + public var infoPaymentType = "" + public var customerNoteHeader = "" + public var pickupTimeHeader = "" + public var rejectOrderAlertCancel = "" + public var sectionHeaderCustomerInfo = "" + public var sectionHeaderTakeout = "" + public var outForDeliveryButton = "" + public var sectionSubheaderColdProducts = "" + public var aPiece = "" enum CodingKeys: String, CodingKey { + case infoTakeOutShopID + case rejectOrderAlertMessage case pickedUpButton - case infoAddress - case sectionHeaderColdProducts case deliveryTypeHeader - case infoTakeoutPhone - case customerNoteHeader + case completedBanner case errorStatusUpdateFailed - case infoDeliveryTime - case sectionHeaderCustomerInfo - case sectionHeaderOtherProducts - case underPreparationButton + case sectionHeaderWarmProducts case errorCouldNotFetchProducts - case infoPaymentType - case rejectOrderAlertMessage - case sectionSubheaderColdProducts - case sectionHeaderOrderStatus + case sectionHeaderOtherProducts case includeCutlery - case readyButton - case rejectButton - case sectionHeaderWarmProducts - case completedBanner - case outForDeliveryButton - case aPiece - case rejectOrderAlertCancel - case infoEmail - case infoCustomerName - case pickupTimeHeader case today - case sectionHeaderTakeout - case rejectOrderAlertConfirm + case infoCustomerName + case sectionHeaderOrderStatus + case rejectButton + case infoOrderTime + case sectionHeaderColdProducts case printButton case rejectOrderAlertTitle - case infoOrderTime - case infoTakeOutShopID + case infoTakeoutPhone + case infoEmail + case infoAddress + case underPreparationButton + case rejectOrderAlertConfirm case infoMobilePhone + case infoDeliveryTime + case readyButton + case infoPaymentType + case customerNoteHeader + case pickupTimeHeader + case rejectOrderAlertCancel + case sectionHeaderCustomerInfo + case sectionHeaderTakeout + case outForDeliveryButton + case sectionSubheaderColdProducts + case aPiece } public override init() { super.init() } @@ -570,256 +563,169 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) + infoTakeOutShopID = try container.decodeIfPresent(String.self, forKey: .infoTakeOutShopID) ?? "__infoTakeOutShopID" + rejectOrderAlertMessage = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertMessage) ?? "__rejectOrderAlertMessage" pickedUpButton = try container.decodeIfPresent(String.self, forKey: .pickedUpButton) ?? "__pickedUpButton" - infoAddress = try container.decodeIfPresent(String.self, forKey: .infoAddress) ?? "__infoAddress" - sectionHeaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderColdProducts) ?? "__sectionHeaderColdProducts" deliveryTypeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTypeHeader) ?? "__deliveryTypeHeader" - infoTakeoutPhone = try container.decodeIfPresent(String.self, forKey: .infoTakeoutPhone) ?? "__infoTakeoutPhone" - customerNoteHeader = try container.decodeIfPresent(String.self, forKey: .customerNoteHeader) ?? "__customerNoteHeader" + completedBanner = try container.decodeIfPresent(String.self, forKey: .completedBanner) ?? "__completedBanner" errorStatusUpdateFailed = try container.decodeIfPresent(String.self, forKey: .errorStatusUpdateFailed) ?? "__errorStatusUpdateFailed" - infoDeliveryTime = try container.decodeIfPresent(String.self, forKey: .infoDeliveryTime) ?? "__infoDeliveryTime" - sectionHeaderCustomerInfo = try container.decodeIfPresent(String.self, forKey: .sectionHeaderCustomerInfo) ?? "__sectionHeaderCustomerInfo" - sectionHeaderOtherProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOtherProducts) ?? "__sectionHeaderOtherProducts" - underPreparationButton = try container.decodeIfPresent(String.self, forKey: .underPreparationButton) ?? "__underPreparationButton" + sectionHeaderWarmProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderWarmProducts) ?? "__sectionHeaderWarmProducts" errorCouldNotFetchProducts = try container.decodeIfPresent(String.self, forKey: .errorCouldNotFetchProducts) ?? "__errorCouldNotFetchProducts" - infoPaymentType = try container.decodeIfPresent(String.self, forKey: .infoPaymentType) ?? "__infoPaymentType" - rejectOrderAlertMessage = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertMessage) ?? "__rejectOrderAlertMessage" - sectionSubheaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionSubheaderColdProducts) ?? "__sectionSubheaderColdProducts" - sectionHeaderOrderStatus = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOrderStatus) ?? "__sectionHeaderOrderStatus" + sectionHeaderOtherProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOtherProducts) ?? "__sectionHeaderOtherProducts" includeCutlery = try container.decodeIfPresent(String.self, forKey: .includeCutlery) ?? "__includeCutlery" - readyButton = try container.decodeIfPresent(String.self, forKey: .readyButton) ?? "__readyButton" - rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" - sectionHeaderWarmProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderWarmProducts) ?? "__sectionHeaderWarmProducts" - completedBanner = try container.decodeIfPresent(String.self, forKey: .completedBanner) ?? "__completedBanner" - outForDeliveryButton = try container.decodeIfPresent(String.self, forKey: .outForDeliveryButton) ?? "__outForDeliveryButton" - aPiece = try container.decodeIfPresent(String.self, forKey: .aPiece) ?? "__aPiece" - rejectOrderAlertCancel = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertCancel) ?? "__rejectOrderAlertCancel" - infoEmail = try container.decodeIfPresent(String.self, forKey: .infoEmail) ?? "__infoEmail" - infoCustomerName = try container.decodeIfPresent(String.self, forKey: .infoCustomerName) ?? "__infoCustomerName" - pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" today = try container.decodeIfPresent(String.self, forKey: .today) ?? "__today" - sectionHeaderTakeout = try container.decodeIfPresent(String.self, forKey: .sectionHeaderTakeout) ?? "__sectionHeaderTakeout" - rejectOrderAlertConfirm = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertConfirm) ?? "__rejectOrderAlertConfirm" + infoCustomerName = try container.decodeIfPresent(String.self, forKey: .infoCustomerName) ?? "__infoCustomerName" + sectionHeaderOrderStatus = try container.decodeIfPresent(String.self, forKey: .sectionHeaderOrderStatus) ?? "__sectionHeaderOrderStatus" + rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" + infoOrderTime = try container.decodeIfPresent(String.self, forKey: .infoOrderTime) ?? "__infoOrderTime" + sectionHeaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionHeaderColdProducts) ?? "__sectionHeaderColdProducts" printButton = try container.decodeIfPresent(String.self, forKey: .printButton) ?? "__printButton" rejectOrderAlertTitle = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertTitle) ?? "__rejectOrderAlertTitle" - infoOrderTime = try container.decodeIfPresent(String.self, forKey: .infoOrderTime) ?? "__infoOrderTime" - infoTakeOutShopID = try container.decodeIfPresent(String.self, forKey: .infoTakeOutShopID) ?? "__infoTakeOutShopID" + infoTakeoutPhone = try container.decodeIfPresent(String.self, forKey: .infoTakeoutPhone) ?? "__infoTakeoutPhone" + infoEmail = try container.decodeIfPresent(String.self, forKey: .infoEmail) ?? "__infoEmail" + infoAddress = try container.decodeIfPresent(String.self, forKey: .infoAddress) ?? "__infoAddress" + underPreparationButton = try container.decodeIfPresent(String.self, forKey: .underPreparationButton) ?? "__underPreparationButton" + rejectOrderAlertConfirm = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertConfirm) ?? "__rejectOrderAlertConfirm" infoMobilePhone = try container.decodeIfPresent(String.self, forKey: .infoMobilePhone) ?? "__infoMobilePhone" + infoDeliveryTime = try container.decodeIfPresent(String.self, forKey: .infoDeliveryTime) ?? "__infoDeliveryTime" + readyButton = try container.decodeIfPresent(String.self, forKey: .readyButton) ?? "__readyButton" + infoPaymentType = try container.decodeIfPresent(String.self, forKey: .infoPaymentType) ?? "__infoPaymentType" + customerNoteHeader = try container.decodeIfPresent(String.self, forKey: .customerNoteHeader) ?? "__customerNoteHeader" + pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" + rejectOrderAlertCancel = try container.decodeIfPresent(String.self, forKey: .rejectOrderAlertCancel) ?? "__rejectOrderAlertCancel" + sectionHeaderCustomerInfo = try container.decodeIfPresent(String.self, forKey: .sectionHeaderCustomerInfo) ?? "__sectionHeaderCustomerInfo" + sectionHeaderTakeout = try container.decodeIfPresent(String.self, forKey: .sectionHeaderTakeout) ?? "__sectionHeaderTakeout" + outForDeliveryButton = try container.decodeIfPresent(String.self, forKey: .outForDeliveryButton) ?? "__outForDeliveryButton" + sectionSubheaderColdProducts = try container.decodeIfPresent(String.self, forKey: .sectionSubheaderColdProducts) ?? "__sectionSubheaderColdProducts" + aPiece = try container.decodeIfPresent(String.self, forKey: .aPiece) ?? "__aPiece" } public override subscript(key: String) -> String? { switch key { + case CodingKeys.infoTakeOutShopID.stringValue: return infoTakeOutShopID + case CodingKeys.rejectOrderAlertMessage.stringValue: return rejectOrderAlertMessage case CodingKeys.pickedUpButton.stringValue: return pickedUpButton - case CodingKeys.infoAddress.stringValue: return infoAddress - case CodingKeys.sectionHeaderColdProducts.stringValue: return sectionHeaderColdProducts case CodingKeys.deliveryTypeHeader.stringValue: return deliveryTypeHeader - case CodingKeys.infoTakeoutPhone.stringValue: return infoTakeoutPhone - case CodingKeys.customerNoteHeader.stringValue: return customerNoteHeader + case CodingKeys.completedBanner.stringValue: return completedBanner case CodingKeys.errorStatusUpdateFailed.stringValue: return errorStatusUpdateFailed - case CodingKeys.infoDeliveryTime.stringValue: return infoDeliveryTime - case CodingKeys.sectionHeaderCustomerInfo.stringValue: return sectionHeaderCustomerInfo - case CodingKeys.sectionHeaderOtherProducts.stringValue: return sectionHeaderOtherProducts - case CodingKeys.underPreparationButton.stringValue: return underPreparationButton + case CodingKeys.sectionHeaderWarmProducts.stringValue: return sectionHeaderWarmProducts case CodingKeys.errorCouldNotFetchProducts.stringValue: return errorCouldNotFetchProducts - case CodingKeys.infoPaymentType.stringValue: return infoPaymentType - case CodingKeys.rejectOrderAlertMessage.stringValue: return rejectOrderAlertMessage - case CodingKeys.sectionSubheaderColdProducts.stringValue: return sectionSubheaderColdProducts - case CodingKeys.sectionHeaderOrderStatus.stringValue: return sectionHeaderOrderStatus + case CodingKeys.sectionHeaderOtherProducts.stringValue: return sectionHeaderOtherProducts case CodingKeys.includeCutlery.stringValue: return includeCutlery - case CodingKeys.readyButton.stringValue: return readyButton - case CodingKeys.rejectButton.stringValue: return rejectButton - case CodingKeys.sectionHeaderWarmProducts.stringValue: return sectionHeaderWarmProducts - case CodingKeys.completedBanner.stringValue: return completedBanner - case CodingKeys.outForDeliveryButton.stringValue: return outForDeliveryButton - case CodingKeys.aPiece.stringValue: return aPiece - case CodingKeys.rejectOrderAlertCancel.stringValue: return rejectOrderAlertCancel - case CodingKeys.infoEmail.stringValue: return infoEmail - case CodingKeys.infoCustomerName.stringValue: return infoCustomerName - case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader case CodingKeys.today.stringValue: return today - case CodingKeys.sectionHeaderTakeout.stringValue: return sectionHeaderTakeout - case CodingKeys.rejectOrderAlertConfirm.stringValue: return rejectOrderAlertConfirm + case CodingKeys.infoCustomerName.stringValue: return infoCustomerName + case CodingKeys.sectionHeaderOrderStatus.stringValue: return sectionHeaderOrderStatus + case CodingKeys.rejectButton.stringValue: return rejectButton + case CodingKeys.infoOrderTime.stringValue: return infoOrderTime + case CodingKeys.sectionHeaderColdProducts.stringValue: return sectionHeaderColdProducts case CodingKeys.printButton.stringValue: return printButton case CodingKeys.rejectOrderAlertTitle.stringValue: return rejectOrderAlertTitle - case CodingKeys.infoOrderTime.stringValue: return infoOrderTime - case CodingKeys.infoTakeOutShopID.stringValue: return infoTakeOutShopID + case CodingKeys.infoTakeoutPhone.stringValue: return infoTakeoutPhone + case CodingKeys.infoEmail.stringValue: return infoEmail + case CodingKeys.infoAddress.stringValue: return infoAddress + case CodingKeys.underPreparationButton.stringValue: return underPreparationButton + case CodingKeys.rejectOrderAlertConfirm.stringValue: return rejectOrderAlertConfirm case CodingKeys.infoMobilePhone.stringValue: return infoMobilePhone + case CodingKeys.infoDeliveryTime.stringValue: return infoDeliveryTime + case CodingKeys.readyButton.stringValue: return readyButton + case CodingKeys.infoPaymentType.stringValue: return infoPaymentType + case CodingKeys.customerNoteHeader.stringValue: return customerNoteHeader + case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader + case CodingKeys.rejectOrderAlertCancel.stringValue: return rejectOrderAlertCancel + case CodingKeys.sectionHeaderCustomerInfo.stringValue: return sectionHeaderCustomerInfo + case CodingKeys.sectionHeaderTakeout.stringValue: return sectionHeaderTakeout + case CodingKeys.outForDeliveryButton.stringValue: return outForDeliveryButton + case CodingKeys.sectionSubheaderColdProducts.stringValue: return sectionSubheaderColdProducts + case CodingKeys.aPiece.stringValue: return aPiece default: return nil } } } - public final class Login: LocalizableSection { - public var emailHeader = "" - public var loginButton = "" - public var passwordHeader = "" - public var passwordPlaceholder = "" - public var appName = "" - public var appVersionPrefix = "" - public var resetPasswordMessage = "" - public var title = "" - public var emailPlaceholder = "" - public var errorInvalidCredentials = "" - - enum CodingKeys: String, CodingKey { - case emailHeader - case loginButton - case passwordHeader - case passwordPlaceholder - case appName - case appVersionPrefix - case resetPasswordMessage - case title - case emailPlaceholder - case errorInvalidCredentials - } - - public override init() { super.init() } - - public required init(from decoder: Decoder) throws { - super.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - emailHeader = try container.decodeIfPresent(String.self, forKey: .emailHeader) ?? "__emailHeader" - loginButton = try container.decodeIfPresent(String.self, forKey: .loginButton) ?? "__loginButton" - passwordHeader = try container.decodeIfPresent(String.self, forKey: .passwordHeader) ?? "__passwordHeader" - passwordPlaceholder = try container.decodeIfPresent(String.self, forKey: .passwordPlaceholder) ?? "__passwordPlaceholder" - appName = try container.decodeIfPresent(String.self, forKey: .appName) ?? "__appName" - appVersionPrefix = try container.decodeIfPresent(String.self, forKey: .appVersionPrefix) ?? "__appVersionPrefix" - resetPasswordMessage = try container.decodeIfPresent(String.self, forKey: .resetPasswordMessage) ?? "__resetPasswordMessage" - title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" - emailPlaceholder = try container.decodeIfPresent(String.self, forKey: .emailPlaceholder) ?? "__emailPlaceholder" - errorInvalidCredentials = try container.decodeIfPresent(String.self, forKey: .errorInvalidCredentials) ?? "__errorInvalidCredentials" - } - - public override subscript(key: String) -> String? { - switch key { - case CodingKeys.emailHeader.stringValue: return emailHeader - case CodingKeys.loginButton.stringValue: return loginButton - case CodingKeys.passwordHeader.stringValue: return passwordHeader - case CodingKeys.passwordPlaceholder.stringValue: return passwordPlaceholder - case CodingKeys.appName.stringValue: return appName - case CodingKeys.appVersionPrefix.stringValue: return appVersionPrefix - case CodingKeys.resetPasswordMessage.stringValue: return resetPasswordMessage - case CodingKeys.title.stringValue: return title - case CodingKeys.emailPlaceholder.stringValue: return emailPlaceholder - case CodingKeys.errorInvalidCredentials.stringValue: return errorInvalidCredentials - default: return nil - } - } - } - - public final class Dashboard: LocalizableSection { - public var sectionLater = "" - public var columnOutForDelivery = "" - public var columnIncomingEmpty = "" - public var columnReady = "" - public var columnReadyEmpty = "" - public var columnAccepted = "" - public var sectionToday = "" - public var itemsPlural = "" - public var columnOutForDeliveryEmpty = "" - public var columnAcceptedEmpty = "" - public var columnDoneToday = "" - public var allOrdersButton = "" - public var sectionTomorrow = "" - public var columnDoneTodayEmpty = "" - public var itemsSingular = "" - public var columnIncoming = "" + public final class OrderDetailNewOrderSection: LocalizableSection { + public var deliveryTimeHeader = "" + public var pickedUpInStoreAt = "" + public var customerNameHeader = "" + public var rejectButton = "" + public var phoneNumberHeader = "" + public var acceptButton = "" + public var pickupTimeHeader = "" + public var header = "" + public var subheader = "" enum CodingKeys: String, CodingKey { - case sectionLater - case columnOutForDelivery - case columnIncomingEmpty - case columnReady - case columnReadyEmpty - case columnAccepted - case sectionToday - case itemsPlural - case columnOutForDeliveryEmpty - case columnAcceptedEmpty - case columnDoneToday - case allOrdersButton - case sectionTomorrow - case columnDoneTodayEmpty - case itemsSingular - case columnIncoming - } - - public override init() { super.init() } - - public required init(from decoder: Decoder) throws { - super.init() - let container = try decoder.container(keyedBy: CodingKeys.self) - sectionLater = try container.decodeIfPresent(String.self, forKey: .sectionLater) ?? "__sectionLater" - columnOutForDelivery = try container.decodeIfPresent(String.self, forKey: .columnOutForDelivery) ?? "__columnOutForDelivery" - columnIncomingEmpty = try container.decodeIfPresent(String.self, forKey: .columnIncomingEmpty) ?? "__columnIncomingEmpty" - columnReady = try container.decodeIfPresent(String.self, forKey: .columnReady) ?? "__columnReady" - columnReadyEmpty = try container.decodeIfPresent(String.self, forKey: .columnReadyEmpty) ?? "__columnReadyEmpty" - columnAccepted = try container.decodeIfPresent(String.self, forKey: .columnAccepted) ?? "__columnAccepted" - sectionToday = try container.decodeIfPresent(String.self, forKey: .sectionToday) ?? "__sectionToday" - itemsPlural = try container.decodeIfPresent(String.self, forKey: .itemsPlural) ?? "__itemsPlural" - columnOutForDeliveryEmpty = try container.decodeIfPresent(String.self, forKey: .columnOutForDeliveryEmpty) ?? "__columnOutForDeliveryEmpty" - columnAcceptedEmpty = try container.decodeIfPresent(String.self, forKey: .columnAcceptedEmpty) ?? "__columnAcceptedEmpty" - columnDoneToday = try container.decodeIfPresent(String.self, forKey: .columnDoneToday) ?? "__columnDoneToday" - allOrdersButton = try container.decodeIfPresent(String.self, forKey: .allOrdersButton) ?? "__allOrdersButton" - sectionTomorrow = try container.decodeIfPresent(String.self, forKey: .sectionTomorrow) ?? "__sectionTomorrow" - columnDoneTodayEmpty = try container.decodeIfPresent(String.self, forKey: .columnDoneTodayEmpty) ?? "__columnDoneTodayEmpty" - itemsSingular = try container.decodeIfPresent(String.self, forKey: .itemsSingular) ?? "__itemsSingular" - columnIncoming = try container.decodeIfPresent(String.self, forKey: .columnIncoming) ?? "__columnIncoming" + case deliveryTimeHeader + case pickedUpInStoreAt + case customerNameHeader + case rejectButton + case phoneNumberHeader + case acceptButton + case pickupTimeHeader + case header + case subheader + } + + public override init() { super.init() } + + public required init(from decoder: Decoder) throws { + super.init() + let container = try decoder.container(keyedBy: CodingKeys.self) + deliveryTimeHeader = try container.decodeIfPresent(String.self, forKey: .deliveryTimeHeader) ?? "__deliveryTimeHeader" + pickedUpInStoreAt = try container.decodeIfPresent(String.self, forKey: .pickedUpInStoreAt) ?? "__pickedUpInStoreAt" + customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" + rejectButton = try container.decodeIfPresent(String.self, forKey: .rejectButton) ?? "__rejectButton" + phoneNumberHeader = try container.decodeIfPresent(String.self, forKey: .phoneNumberHeader) ?? "__phoneNumberHeader" + acceptButton = try container.decodeIfPresent(String.self, forKey: .acceptButton) ?? "__acceptButton" + pickupTimeHeader = try container.decodeIfPresent(String.self, forKey: .pickupTimeHeader) ?? "__pickupTimeHeader" + header = try container.decodeIfPresent(String.self, forKey: .header) ?? "__header" + subheader = try container.decodeIfPresent(String.self, forKey: .subheader) ?? "__subheader" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.sectionLater.stringValue: return sectionLater - case CodingKeys.columnOutForDelivery.stringValue: return columnOutForDelivery - case CodingKeys.columnIncomingEmpty.stringValue: return columnIncomingEmpty - case CodingKeys.columnReady.stringValue: return columnReady - case CodingKeys.columnReadyEmpty.stringValue: return columnReadyEmpty - case CodingKeys.columnAccepted.stringValue: return columnAccepted - case CodingKeys.sectionToday.stringValue: return sectionToday - case CodingKeys.itemsPlural.stringValue: return itemsPlural - case CodingKeys.columnOutForDeliveryEmpty.stringValue: return columnOutForDeliveryEmpty - case CodingKeys.columnAcceptedEmpty.stringValue: return columnAcceptedEmpty - case CodingKeys.columnDoneToday.stringValue: return columnDoneToday - case CodingKeys.allOrdersButton.stringValue: return allOrdersButton - case CodingKeys.sectionTomorrow.stringValue: return sectionTomorrow - case CodingKeys.columnDoneTodayEmpty.stringValue: return columnDoneTodayEmpty - case CodingKeys.itemsSingular.stringValue: return itemsSingular - case CodingKeys.columnIncoming.stringValue: return columnIncoming + case CodingKeys.deliveryTimeHeader.stringValue: return deliveryTimeHeader + case CodingKeys.pickedUpInStoreAt.stringValue: return pickedUpInStoreAt + case CodingKeys.customerNameHeader.stringValue: return customerNameHeader + case CodingKeys.rejectButton.stringValue: return rejectButton + case CodingKeys.phoneNumberHeader.stringValue: return phoneNumberHeader + case CodingKeys.acceptButton.stringValue: return acceptButton + case CodingKeys.pickupTimeHeader.stringValue: return pickupTimeHeader + case CodingKeys.header.stringValue: return header + case CodingKeys.subheader.stringValue: return subheader default: return nil } } } public final class DefaultSection: LocalizableSection { - public var back = "" - public var skip = "" + public var cancel = "" public var edit = "" - public var ok = "" - public var later = "" - public var save = "" - public var previous = "" public var retry = "" - public var yes = "" - public var settings = "" + public var back = "" public var no = "" + public var save = "" public var next = "" - public var cancel = "" + public var yes = "" + public var previous = "" + public var settings = "" + public var skip = "" + public var ok = "" + public var later = "" enum CodingKeys: String, CodingKey { - case back - case skip + case cancel case edit - case ok - case later - case save - case previous case retry - case yes - case settings + case back case no + case save case next - case cancel + case yes + case previous + case settings + case skip + case ok + case later } public override init() { super.init() } @@ -827,60 +733,60 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - back = try container.decodeIfPresent(String.self, forKey: .back) ?? "__back" - skip = try container.decodeIfPresent(String.self, forKey: .skip) ?? "__skip" + cancel = try container.decodeIfPresent(String.self, forKey: .cancel) ?? "__cancel" edit = try container.decodeIfPresent(String.self, forKey: .edit) ?? "__edit" - ok = try container.decodeIfPresent(String.self, forKey: .ok) ?? "__ok" - later = try container.decodeIfPresent(String.self, forKey: .later) ?? "__later" - save = try container.decodeIfPresent(String.self, forKey: .save) ?? "__save" - previous = try container.decodeIfPresent(String.self, forKey: .previous) ?? "__previous" retry = try container.decodeIfPresent(String.self, forKey: .retry) ?? "__retry" - yes = try container.decodeIfPresent(String.self, forKey: .yes) ?? "__yes" - settings = try container.decodeIfPresent(String.self, forKey: .settings) ?? "__settings" + back = try container.decodeIfPresent(String.self, forKey: .back) ?? "__back" no = try container.decodeIfPresent(String.self, forKey: .no) ?? "__no" + save = try container.decodeIfPresent(String.self, forKey: .save) ?? "__save" next = try container.decodeIfPresent(String.self, forKey: .next) ?? "__next" - cancel = try container.decodeIfPresent(String.self, forKey: .cancel) ?? "__cancel" + yes = try container.decodeIfPresent(String.self, forKey: .yes) ?? "__yes" + previous = try container.decodeIfPresent(String.self, forKey: .previous) ?? "__previous" + settings = try container.decodeIfPresent(String.self, forKey: .settings) ?? "__settings" + skip = try container.decodeIfPresent(String.self, forKey: .skip) ?? "__skip" + ok = try container.decodeIfPresent(String.self, forKey: .ok) ?? "__ok" + later = try container.decodeIfPresent(String.self, forKey: .later) ?? "__later" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.back.stringValue: return back - case CodingKeys.skip.stringValue: return skip + case CodingKeys.cancel.stringValue: return cancel case CodingKeys.edit.stringValue: return edit - case CodingKeys.ok.stringValue: return ok - case CodingKeys.later.stringValue: return later - case CodingKeys.save.stringValue: return save - case CodingKeys.previous.stringValue: return previous case CodingKeys.retry.stringValue: return retry - case CodingKeys.yes.stringValue: return yes - case CodingKeys.settings.stringValue: return settings + case CodingKeys.back.stringValue: return back case CodingKeys.no.stringValue: return no + case CodingKeys.save.stringValue: return save case CodingKeys.next.stringValue: return next - case CodingKeys.cancel.stringValue: return cancel + case CodingKeys.yes.stringValue: return yes + case CodingKeys.previous.stringValue: return previous + case CodingKeys.settings.stringValue: return settings + case CodingKeys.skip.stringValue: return skip + case CodingKeys.ok.stringValue: return ok + case CodingKeys.later.stringValue: return later default: return nil } } } public final class Printer: LocalizableSection { - public var bluetoothHintFooter = "" - public var connectedSuccessMessage = "" - public var sectionHeaderActivePrinter = "" - public var errorSomethingHappened = "" - public var deleteButton = "" - public var sectionHeaderNewPrinters = "" public var title = "" + public var connectedSuccessMessage = "" + public var bluetoothHintFooter = "" public var connectButton = "" + public var sectionHeaderNewPrinters = "" + public var deleteButton = "" + public var errorSomethingHappened = "" + public var sectionHeaderActivePrinter = "" enum CodingKeys: String, CodingKey { - case bluetoothHintFooter - case connectedSuccessMessage - case sectionHeaderActivePrinter - case errorSomethingHappened - case deleteButton - case sectionHeaderNewPrinters case title + case connectedSuccessMessage + case bluetoothHintFooter case connectButton + case sectionHeaderNewPrinters + case deleteButton + case errorSomethingHappened + case sectionHeaderActivePrinter } public override init() { super.init() } @@ -888,26 +794,120 @@ public final class Localizations: LocalizableModel { public required init(from decoder: Decoder) throws { super.init() let container = try decoder.container(keyedBy: CodingKeys.self) - bluetoothHintFooter = try container.decodeIfPresent(String.self, forKey: .bluetoothHintFooter) ?? "__bluetoothHintFooter" - connectedSuccessMessage = try container.decodeIfPresent(String.self, forKey: .connectedSuccessMessage) ?? "__connectedSuccessMessage" - sectionHeaderActivePrinter = try container.decodeIfPresent(String.self, forKey: .sectionHeaderActivePrinter) ?? "__sectionHeaderActivePrinter" - errorSomethingHappened = try container.decodeIfPresent(String.self, forKey: .errorSomethingHappened) ?? "__errorSomethingHappened" - deleteButton = try container.decodeIfPresent(String.self, forKey: .deleteButton) ?? "__deleteButton" - sectionHeaderNewPrinters = try container.decodeIfPresent(String.self, forKey: .sectionHeaderNewPrinters) ?? "__sectionHeaderNewPrinters" title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + connectedSuccessMessage = try container.decodeIfPresent(String.self, forKey: .connectedSuccessMessage) ?? "__connectedSuccessMessage" + bluetoothHintFooter = try container.decodeIfPresent(String.self, forKey: .bluetoothHintFooter) ?? "__bluetoothHintFooter" connectButton = try container.decodeIfPresent(String.self, forKey: .connectButton) ?? "__connectButton" + sectionHeaderNewPrinters = try container.decodeIfPresent(String.self, forKey: .sectionHeaderNewPrinters) ?? "__sectionHeaderNewPrinters" + deleteButton = try container.decodeIfPresent(String.self, forKey: .deleteButton) ?? "__deleteButton" + errorSomethingHappened = try container.decodeIfPresent(String.self, forKey: .errorSomethingHappened) ?? "__errorSomethingHappened" + sectionHeaderActivePrinter = try container.decodeIfPresent(String.self, forKey: .sectionHeaderActivePrinter) ?? "__sectionHeaderActivePrinter" } public override subscript(key: String) -> String? { switch key { - case CodingKeys.bluetoothHintFooter.stringValue: return bluetoothHintFooter + case CodingKeys.title.stringValue: return title case CodingKeys.connectedSuccessMessage.stringValue: return connectedSuccessMessage - case CodingKeys.sectionHeaderActivePrinter.stringValue: return sectionHeaderActivePrinter - case CodingKeys.errorSomethingHappened.stringValue: return errorSomethingHappened - case CodingKeys.deleteButton.stringValue: return deleteButton + case CodingKeys.bluetoothHintFooter.stringValue: return bluetoothHintFooter + case CodingKeys.connectButton.stringValue: return connectButton case CodingKeys.sectionHeaderNewPrinters.stringValue: return sectionHeaderNewPrinters + case CodingKeys.deleteButton.stringValue: return deleteButton + case CodingKeys.errorSomethingHappened.stringValue: return errorSomethingHappened + case CodingKeys.sectionHeaderActivePrinter.stringValue: return sectionHeaderActivePrinter + default: return nil + } + } + } + + public final class OrderStatus: LocalizableSection { + public var accepted = "" + + enum CodingKeys: String, CodingKey { + case accepted + } + + public override init() { super.init() } + + public required init(from decoder: Decoder) throws { + super.init() + let container = try decoder.container(keyedBy: CodingKeys.self) + accepted = try container.decodeIfPresent(String.self, forKey: .accepted) ?? "__accepted" + } + + public override subscript(key: String) -> String? { + switch key { + case CodingKeys.accepted.stringValue: return accepted + default: return nil + } + } + } + + public final class SearchOrders: LocalizableSection { + public var emptyMessage = "" + public var statusShipped = "" + public var statusAccepted = "" + public var title = "" + public var orderNumberHeader = "" + public var orderDateHeader = "" + public var statusReady = "" + public var statusRejected = "" + public var searchfieldPlaceholder = "" + public var statusNew = "" + public var customerNameHeader = "" + public var statusCompleted = "" + public var orderStatusHeader = "" + + enum CodingKeys: String, CodingKey { + case emptyMessage + case statusShipped + case statusAccepted + case title + case orderNumberHeader + case orderDateHeader + case statusReady + case statusRejected + case searchfieldPlaceholder + case statusNew + case customerNameHeader + case statusCompleted + case orderStatusHeader + } + + public override init() { super.init() } + + public required init(from decoder: Decoder) throws { + super.init() + let container = try decoder.container(keyedBy: CodingKeys.self) + emptyMessage = try container.decodeIfPresent(String.self, forKey: .emptyMessage) ?? "__emptyMessage" + statusShipped = try container.decodeIfPresent(String.self, forKey: .statusShipped) ?? "__statusShipped" + statusAccepted = try container.decodeIfPresent(String.self, forKey: .statusAccepted) ?? "__statusAccepted" + title = try container.decodeIfPresent(String.self, forKey: .title) ?? "__title" + orderNumberHeader = try container.decodeIfPresent(String.self, forKey: .orderNumberHeader) ?? "__orderNumberHeader" + orderDateHeader = try container.decodeIfPresent(String.self, forKey: .orderDateHeader) ?? "__orderDateHeader" + statusReady = try container.decodeIfPresent(String.self, forKey: .statusReady) ?? "__statusReady" + statusRejected = try container.decodeIfPresent(String.self, forKey: .statusRejected) ?? "__statusRejected" + searchfieldPlaceholder = try container.decodeIfPresent(String.self, forKey: .searchfieldPlaceholder) ?? "__searchfieldPlaceholder" + statusNew = try container.decodeIfPresent(String.self, forKey: .statusNew) ?? "__statusNew" + customerNameHeader = try container.decodeIfPresent(String.self, forKey: .customerNameHeader) ?? "__customerNameHeader" + statusCompleted = try container.decodeIfPresent(String.self, forKey: .statusCompleted) ?? "__statusCompleted" + orderStatusHeader = try container.decodeIfPresent(String.self, forKey: .orderStatusHeader) ?? "__orderStatusHeader" + } + + public override subscript(key: String) -> String? { + switch key { + case CodingKeys.emptyMessage.stringValue: return emptyMessage + case CodingKeys.statusShipped.stringValue: return statusShipped + case CodingKeys.statusAccepted.stringValue: return statusAccepted case CodingKeys.title.stringValue: return title - case CodingKeys.connectButton.stringValue: return connectButton + case CodingKeys.orderNumberHeader.stringValue: return orderNumberHeader + case CodingKeys.orderDateHeader.stringValue: return orderDateHeader + case CodingKeys.statusReady.stringValue: return statusReady + case CodingKeys.statusRejected.stringValue: return statusRejected + case CodingKeys.searchfieldPlaceholder.stringValue: return searchfieldPlaceholder + case CodingKeys.statusNew.stringValue: return statusNew + case CodingKeys.customerNameHeader.stringValue: return customerNameHeader + case CodingKeys.statusCompleted.stringValue: return statusCompleted + case CodingKeys.orderStatusHeader.stringValue: return orderStatusHeader default: return nil } } diff --git a/Modules/Sources/TokenHandler/APITokensEnvelopeProtocol.swift b/Modules/Sources/TokenHandler/APITokensEnvelopeProtocol.swift deleted file mode 100644 index f2995c8..0000000 --- a/Modules/Sources/TokenHandler/APITokensEnvelopeProtocol.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// File.swift -// -// -// Created by Jakob Mygind on 27/01/2023. -// - -import Foundation - - -public protocol APITokensEnvelopeProtocol: Equatable, Decodable { - var getAccessToken: String { get } - var getRefreshToken: String { get } -} - -extension APITokensEnvelopeProtocol { - var accessTokenExpiry: Date { - guard let jwt = JWT(accessToken: getAccessToken) else { return Date.distantPast } - return Date(timeIntervalSince1970: jwt.exp) - } - - func isAccessTokenValid(now: Date) -> Bool { - accessTokenExpiry > now - } -} diff --git a/Modules/Sources/TokenHandler/AuthenticationhandlerAsync.swift b/Modules/Sources/TokenHandler/AuthenticationhandlerAsync.swift deleted file mode 100644 index 12fab44..0000000 --- a/Modules/Sources/TokenHandler/AuthenticationhandlerAsync.swift +++ /dev/null @@ -1,158 +0,0 @@ -// -// File.swift -// -// -// Created by Jakob Mygind on 14/11/2022. -// - -import Foundation - -public struct RefreshBody: Encodable { - let token: String -} - -/// This class is used to authenticate all requests, and if needed refresh the tokens -/// The state of tokens can be monitored by subscribing to `tokenUpdatePublisher`, if this outouts nil, it means the user should log in again -public actor AuthenticationHandlerAsync { - - var apiTokens: APITokensEnvelope? { - get { getTokens() } - set { saveTokens(newValue) } - } - - var refreshTask: Task? - var networkRequest: - (URLRequest) async throws -> (Data, URLResponse) = URLSession.shared.data(for: ) - var now: () -> Date = Date.init - - private var refreshURL: URL - - let getTokens: () -> APITokensEnvelope? - let saveTokens: (APITokensEnvelope?) -> Void - let refreshBodyTransform: (_ refreshToken: String) -> any Encodable - - public init( - refreshURL: URL, - getTokens: @escaping () -> APITokensEnvelope?, - saveTokens: @escaping (APITokensEnvelope?) -> Void, - now: @escaping () -> Date = Date.init, - networkRequest: @escaping (URLRequest) async throws -> (Data, URLResponse) = URLSession.shared.data(for: ), - refreshBodyTransform: @escaping (_ refreshToken: String) -> some Encodable = RefreshBody.init(token: ) - ) { - self.refreshURL = refreshURL - self.getTokens = getTokens - self.saveTokens = saveTokens - self.now = now - self.networkRequest = networkRequest - self.refreshBodyTransform = refreshBodyTransform - } - - func validTokens() async throws -> APITokensEnvelope { - if let handle = refreshTask { - return try await handle.value - } - - guard let apiTokens else { - throw URLError(.userAuthenticationRequired) - } - - if apiTokens.isAccessTokenValid(now: now()) { - return apiTokens - } - - return try await refreshedTokens() - } - - func refreshedTokens() async throws -> APITokensEnvelope { - if let refreshTask = refreshTask { - return try await refreshTask.value - } - - let task = Task { () throws -> APITokensEnvelope in - defer { self.refreshTask = nil } - - guard let refreshToken = apiTokens?.getRefreshToken else { - throw URLError(.userAuthenticationRequired) - } - let newTokens = try await AuthenticationHandlerAsync.refreshTokens(using: refreshToken, refreshURL: refreshURL, networkRequest: networkRequest, refreshBodyTransform: refreshBodyTransform) - apiTokens = newTokens - - return newTokens - } - - self.refreshTask = task - - return try await task.value - } - - /// Make call to refresh access token - /// - Parameter refreshToken: refreshtoken to be used - /// - Returns: A fresh set of tokens - private static func refreshTokens( - using refreshToken: String, - refreshURL: URL, - networkRequest: (URLRequest) async throws -> (Data, URLResponse), - refreshBodyTransform: (_ refreshToken: String) -> any Encodable - ) async throws -> APITokensEnvelope { - - let decoder = JSONDecoder() - - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ" - decoder.dateDecodingStrategy = .formatted(formatter) - - var request = URLRequest(url: refreshURL) - request.httpMethod = "POST" - request.httpBody = try JSONEncoder().encode(refreshBodyTransform(refreshToken)) - request.setValue("application/json", forHTTPHeaderField: "Content-Type") - - let response = try await networkRequest(request) - print("✈️ResponseData: \(String(data: response.0, encoding: .utf8)!)") - if let code = (response.1 as? HTTPURLResponse)?.statusCode, - code == 401 { - throw URLError(.userAuthenticationRequired) - } - - return try decoder.decode(APITokensEnvelope.self, from: response.0) - } - - /// Authenticates URLRequests - /// - Parameter request: Requests to be authenticated - /// - Returns: The result of the request - public func performAuthenticatedRequest(_ request: URLRequest) async throws -> (Data, URLResponse) { - - do { - let tokens = try await validTokens() - - do { - let response = try await performAuthenticatedRequest(request, accessToken: tokens.getAccessToken) - if - let code = (response.1 as? HTTPURLResponse)?.statusCode, - code == 401 { - throw URLError(.userAuthenticationRequired) - } - return response - } catch let error as URLError where error.code == .userAuthenticationRequired { - let freshTokens = try await refreshedTokens() - let response = try await performAuthenticatedRequest(request, accessToken: freshTokens.getAccessToken) - return response - } - } catch { - apiTokens = nil - throw error - } - } - - /// Adds access token to request - /// throws auth error if provided token should be invalid - private func performAuthenticatedRequest( - _ request: URLRequest, - accessToken: String - ) async throws -> (Data, URLResponse) { - var request = request - request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization") - - return try await networkRequest(request) - } -} diff --git a/Modules/Sources/TokenHandler/JWT.swift b/Modules/Sources/TokenHandler/JWT.swift deleted file mode 100644 index e5d1404..0000000 --- a/Modules/Sources/TokenHandler/JWT.swift +++ /dev/null @@ -1,31 +0,0 @@ -import Foundation - -struct JWT: Decodable { - - let exp: Double - - init?(accessToken: String) { - let jwtStrings = accessToken.split(separator: ".") - - guard jwtStrings.count == 3 else { return nil } - - let claimString = - String(jwtStrings[1]).padding( - toLength: ((String(jwtStrings[1]).count + 3) / 4) * 4, - withPad: "=", - startingAt: 0 - ) - - let data = - Data(base64Encoded: claimString)! - - do { - self = - try JSONDecoder().decode(Self.self, from: data) - - } catch { - print(error) - return nil - } - } -} diff --git a/Modules/Tests/TokenHandlerTests/Models.swift b/Modules/Tests/TokenHandlerTests/Models.swift deleted file mode 100644 index 7c43cfe..0000000 --- a/Modules/Tests/TokenHandlerTests/Models.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// File.swift -// -// -// Created by Jakob Mygind on 27/01/2023. -// - -import Foundation -import TokenHandler - -public struct RefreshTokenEnvelope: Codable, Equatable { - init(token: String, expiresAt: Date) { - self.token = token - self.expiresAt = expiresAt - } - - public var token: String - public var expiresAt: Date -} - -public struct APITokensEnvelope: Codable, Equatable { - init( - token: String, - refreshToken: RefreshTokenEnvelope - ) { - self.token = token - self.refreshToken = refreshToken - } - - public var token: String - public var refreshToken: RefreshTokenEnvelope -} - -extension APITokensEnvelope { - public static let mock = Self( - token: "MockToken", - refreshToken: .init(token: "MockRefreshToken", expiresAt: .distantFuture)) -} - -extension APITokensEnvelope: APITokensEnvelopeProtocol { - public var getAccessToken: String { - token - } - - public var getRefreshToken: String { - refreshToken.token - } -} diff --git a/Modules/Tests/TokenHandlerTests/TokenHandlerTests.swift b/Modules/Tests/TokenHandlerTests/TokenHandlerTests.swift deleted file mode 100644 index 53a9b67..0000000 --- a/Modules/Tests/TokenHandlerTests/TokenHandlerTests.swift +++ /dev/null @@ -1,330 +0,0 @@ -import Combine -import Foundation -import XCTest - -// -// File.swift -// -// -// Created by Jakob Mygind on 20/01/2022. -// -@testable import TokenHandler -//@testable import Model - -final class TokenHandlerTests: XCTestCase { - - var formatter: DateFormatter = { - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ" - return formatter - }() - - var tokenSuccessResponseData: Data { - let encoder = JSONEncoder() - encoder.dateEncodingStrategy = .formatted(formatter) - return try! encoder.encode(newTokens) - } - - lazy var newTokens = APITokensEnvelope( - token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiOSIsInRva2VuVHlwZSI6Ik1lcmNoYW50IiwibmJmIjoxNjQyNjgxMzU1LCJleHAiOjE2NDI2ODI1NTUsImlhdCI6MTY0MjY4MTM1NX0.TUt15w5BOJfeekhM4TY0qdCHNlr4qtDIVdh_S6MzwTI", - refreshToken: .init( - token: "6/IOyrlaxkYSI/hqVrDFgzn2tefXfKrVNQJvEIJ32gMhDDNAkmDMYiNogS4LvdS3r3CLuRqbiWWNLcTby3i9xg==", - expiresAt: formatter.date(from: "2022-04-20T12:22:35.3876411Z")! - ) - ) - - let apiCallSuccessData = "Success".data(using: .utf8)! - - @available(iOS 16.0, *) - @MainActor - func test_refreshing_expired_token() async throws { - let successResponse = HTTPURLResponse( - url: URL(string: ":")!, statusCode: 200, httpVersion: nil, headerFields: nil)! - let now = Date.distantFuture - var tokens: APITokensEnvelope? = APITokensEnvelope.mock - - tokens?.token = .expired - - let apiURLRequest: URLRequest = URLRequest(url: URL(string: ":")!) - let refreshURL = URL(string: "refresh://")! - - var continuation: CheckedContinuation<(Data, URLResponse), Error>! - - var requestsMade: [URLRequest] = [] - let authHandler = AuthenticationHandlerAsync( - refreshURL: refreshURL, - getTokens: { tokens }, - saveTokens: { tokens = $0 }, - now: { now }, - networkRequest: { urlRequest in - requestsMade.append(urlRequest) - return try await withCheckedThrowingContinuation({ cont in - continuation = cont - }) - } - ) - - var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] - - var task = await authHandler.refreshTask - XCTAssertNil(task) // Not yet refreshing - Task { - do { - valuesReceived.append(try await authHandler.performAuthenticatedRequest(apiURLRequest)) // Make the api call - } catch { - XCTFail() - } - } - - await Task.yield() - task = await authHandler.refreshTask - XCTAssertNotNil(task) // Refresh started - XCTAssertEqual(requestsMade.count, 1) - XCTAssertEqual(requestsMade.first?.url, refreshURL) // Refreash call was made - continuation.resume(returning: (tokenSuccessResponseData, successResponse)) - - try await Task.sleep(for: .milliseconds(1)) - task = await authHandler.refreshTask - XCTAssertNil(task) // Refresh ended - - let refreshedTokens = await authHandler.apiTokens - XCTAssertEqual(refreshedTokens, newTokens) // We now have new tokens - continuation.resume(returning: (apiCallSuccessData, successResponse)) // Now original api call is made and for convenience we just send the same data again - try await Task.sleep(for: .milliseconds(1)) - - task = await authHandler.refreshTask - XCTAssertNil(task) // Refresh was terminated - XCTAssertEqual(valuesReceived.count, 1) - let result = try XCTUnwrap(valuesReceived.first) - XCTAssertEqual(result.data, apiCallSuccessData) // Original api call successfully returned some data - } - - @available(iOS 16.0, *) - @MainActor - func test_refreshing_expired_token_while_multiple_calls_made() async throws { - - let now = Date.distantFuture - var tokens: APITokensEnvelope? = APITokensEnvelope.mock - - tokens?.token = .expired - - let apiURLRequest: URLRequest = URLRequest(url: URL(string: ":")!) - let refreshURL = URL(string: "refresh://")! - - var continuations: [CheckedContinuation<(Data, URLResponse), Error>] = [] - - var requestsMade: [URLRequest] = [] - let authHandler = AuthenticationHandlerAsync( - refreshURL: refreshURL, - getTokens: { tokens }, - saveTokens: { tokens = $0 }, - now: { now }, - networkRequest: { urlRequest in - requestsMade.append(urlRequest) - return try await withCheckedThrowingContinuation({ cont in - continuations.append(cont) - }) - }) - - var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] - - var task = await authHandler.refreshTask - XCTAssertNil(task) // Not yet refreshing - - for _ in 0..<3 { - Task { - do { - valuesReceived.append(try await authHandler.performAuthenticatedRequest(apiURLRequest)) // Make the api call - } catch { - XCTFail() - } - } - } - - await Task.yield() - task = await authHandler.refreshTask - XCTAssertNotNil(task) // Refresh started - XCTAssertEqual(requestsMade.count, 1) - XCTAssertEqual(requestsMade.first?.url, refreshURL) // Refreash call was made - (try XCTUnwrap(continuations.removeFirst())).resume(returning: (tokenSuccessResponseData, .success)) - - try await Task.sleep(for: .milliseconds(1)) - task = await authHandler.refreshTask - XCTAssertNil(task) // Refresh ended - XCTAssertEqual(continuations.count, 3) - let refreshedTokens = await authHandler.apiTokens - XCTAssertEqual(refreshedTokens, newTokens) // We now have new tokens - try await Task.sleep(for: .milliseconds(1)) - continuations.forEach { - $0.resume(returning: (apiCallSuccessData, .success)) - } - - try await Task.sleep(for: .milliseconds(1)) - - task = await authHandler.refreshTask - XCTAssertNil(task) // Refresh was terminated - XCTAssertEqual(valuesReceived.count, 3) - let result = try XCTUnwrap(valuesReceived.first) - XCTAssertEqual(result.data, apiCallSuccessData) // Original api call successfully returned some data - } - - @available(iOS 16.0, *) - @MainActor - func test_api_call_fails_with_non_expired_token_but_refresh_succeeds_while_multiple_calls_made() async throws { - - let now = Date.distantPast - var tokens: APITokensEnvelope? = APITokensEnvelope.mock - - tokens?.token = .expires06142256 - - let apiURLRequest: URLRequest = URLRequest(url: URL(string: "apiCall://")!) - let refreshURL = URL(string: "refresh://")! - - var requestsAndContinuations: [(request: URLRequest, continuation: CheckedContinuation<(Data, URLResponse), Error>)] = [] - let authHandler = AuthenticationHandlerAsync( - refreshURL: refreshURL, - getTokens: { tokens }, - saveTokens: { - tokens = $0 - }, - now: { now }, - networkRequest: { urlRequest in - return try await withCheckedThrowingContinuation({ cont in - requestsAndContinuations.append((urlRequest, cont)) - }) - }) - - var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] - - var task = await authHandler.refreshTask - XCTAssertNil(task) // Not yet refreshing - - // Make 3 simultaneous api calls - for _ in 0..<3 { - Task { - do { - valuesReceived.append(try await authHandler.performAuthenticatedRequest(apiURLRequest)) // Make the api call - } catch { - XCTFail("\(error.localizedDescription)") - } - } - } - - await Task.yield() - - let firstRequest = requestsAndContinuations.removeFirst() - XCTAssertEqual(firstRequest.request.url, URL(string: "apiCall://")!) - (try XCTUnwrap(firstRequest.continuation)).resume(returning: (Data(), .tokenExpired)) - - try await Task.sleep(for: .milliseconds(1)) - task = await authHandler.refreshTask - XCTAssertNotNil(task) // Refresh started - XCTAssertEqual(requestsAndContinuations.count, 3) - - // Find apicall made corresponding to the refreshCall - let refreshCalls = requestsAndContinuations.filter { $0.request.url == URL(string: "refresh://")! } - XCTAssertEqual(refreshCalls.count, 1) - let refreshIndex = try XCTUnwrap(requestsAndContinuations.firstIndex(where: { $0.request.url == URL(string: "refresh://")!})) - let refreshContinuation = requestsAndContinuations.remove(at: refreshIndex).continuation - - (try XCTUnwrap(refreshContinuation)).resume(returning: (tokenSuccessResponseData, .success)) - - try await Task.sleep(for: .milliseconds(1)) - task = await authHandler.refreshTask - XCTAssertNil(task) // Refresh was terminated - let refreshedTokens = await authHandler.apiTokens - XCTAssertEqual(refreshedTokens, newTokens) // We now have new tokens - XCTAssertEqual(requestsAndContinuations.count, 3) - requestsAndContinuations.forEach { - $0.continuation.resume(returning: (apiCallSuccessData, .success)) - } - try await Task.sleep(for: .milliseconds(1)) - XCTAssertEqual(valuesReceived.count, 3) - let result = try XCTUnwrap(valuesReceived[1]) - XCTAssertEqual(result.data, apiCallSuccessData) // Original api calls successfully returned some data - } - - @available(iOS 16.0, *) - @MainActor - func test_refreshing_expired_token_fail_while_multiple_calls_made() async throws { - - let now = Date.distantFuture - var tokens: APITokensEnvelope? = APITokensEnvelope.mock - - tokens?.token = .expired - - let apiURLRequest: URLRequest = URLRequest(url: URL(string: ":")!) - let refreshURL = URL(string: "refresh://")! - - var continuations: [CheckedContinuation<(Data, URLResponse), Error>] = [] - - var requestsMade: [URLRequest] = [] - let authHandler = AuthenticationHandlerAsync( - refreshURL: refreshURL, - getTokens: { tokens }, - saveTokens: { tokens = $0 }, - now: { now }, - networkRequest: { urlRequest in - requestsMade.append(urlRequest) - return try await withCheckedThrowingContinuation({ cont in - continuations.append(cont) - }) - }) - - var valuesReceived: [URLSession.DataTaskPublisher.Output] = [] - - var task = await authHandler.refreshTask - XCTAssertNil(task) // Not yet refreshing - - let workCount = 3 - var failedRequests = 0 - - for _ in 0.. + + + + + + + + + + + + Date: Tue, 7 Feb 2023 14:12:20 +0100 Subject: [PATCH 09/10] chore: cleanup --- .../APIClientLive/APIConvenience.swift | 45 +++++++++++++++++++ Modules/Sources/APIClientLive/Client.swift | 35 --------------- 2 files changed, 45 insertions(+), 35 deletions(-) create mode 100644 Modules/Sources/APIClientLive/APIConvenience.swift diff --git a/Modules/Sources/APIClientLive/APIConvenience.swift b/Modules/Sources/APIClientLive/APIConvenience.swift new file mode 100644 index 0000000..ef81e2c --- /dev/null +++ b/Modules/Sources/APIClientLive/APIConvenience.swift @@ -0,0 +1,45 @@ +// +// File.swift +// +// +// Created by Jakob Mygind on 07/02/2023. +// + +import Foundation +import MLTokenHandler +import Model + +func performAuthenticatedRequest( + _ request: URLRequest, + using authHandler: AuthenticationHandlerAsync, + file: StaticString = #file, + line: UInt = #line, + jsonDecoder: JSONDecoder = { + let decoder = JSONDecoder() + let formatter = DateFormatter() + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS" + decoder.dateDecodingStrategy = .formatted(formatter) + return decoder + }() +) async throws -> Output { + do { + let (data, response) = try await authHandler.performAuthenticatedRequest(request) + do { + + let decoded = try jsonDecoder.decode(Output.self, from: data) + return decoded + } catch is DecodingError { + var decodedError = try jsonDecoder.decode(APIError.self, from: data) + if let code = (response as? HTTPURLResponse)?.statusCode { + decodedError.errorCode = "\(code)" + } + throw decodedError + } + } catch { + if let error = error as? APIError { + throw error + } + throw APIError(error: error, file: file, line: line) + } +} diff --git a/Modules/Sources/APIClientLive/Client.swift b/Modules/Sources/APIClientLive/Client.swift index 7999edb..2f29475 100644 --- a/Modules/Sources/APIClientLive/Client.swift +++ b/Modules/Sources/APIClientLive/Client.swift @@ -40,38 +40,3 @@ extension APIClient { ) } } - -func performAuthenticatedRequest( - _ request: URLRequest, - using authHandler: AuthenticationHandlerAsync, - file: StaticString = #file, - line: UInt = #line, - jsonDecoder: JSONDecoder = { - let decoder = JSONDecoder() - let formatter = DateFormatter() - formatter.locale = Locale(identifier: "en_US_POSIX") - formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS" - decoder.dateDecodingStrategy = .formatted(formatter) - return decoder - }() -) async throws -> Output { - do { - let (data, response) = try await authHandler.performAuthenticatedRequest(request) - do { - - let decoded = try jsonDecoder.decode(Output.self, from: data) - return decoded - } catch is DecodingError { - var decodedError = try jsonDecoder.decode(APIError.self, from: data) - if let code = (response as? HTTPURLResponse)?.statusCode { - decodedError.errorCode = "\(code)" - } - throw decodedError - } - } catch { - if let error = error as? APIError { - throw error - } - throw APIError(error: error, file: file, line: line) - } -} From 403be69656930b69bd14efa80fbc7d3f49e0eb72 Mon Sep 17 00:00:00 2001 From: Jakob Mygind Date: Tue, 7 Feb 2023 14:18:15 +0100 Subject: [PATCH 10/10] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2f47281..2df7fa3 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,11 @@ Make sure you have familiarized yourself somewhat with the concepts in the MVVM 3. Name your project - Rename project: Tap main project, top left -> File inspector -> Identity and Type -> Name -> enter new name and tap 'enter' -> Tap 'Rename' - Rename the scheme: Tap the scheme -> Manage schemes -> change the name of the PROJECT_NAME scheme. -5. In AppDelegate replace placeholders with relevant strings +5. In `EnvVars` and `LiveDependencies` in the main target replace placeholders with your own environment values 6. In .xcconfig files insert your own urls 7. Insert the project specific NStack keys in the NStack.plist file, located in the App folder 8. Insert your own colors in Colors.xcassets and Colors.swift in Style bundle 9. Insert your own fonts in /Fonts and Fonts.swift in Style bundle 10. Fix font names in RegisterFonts.swift 11. Drop your own shared assets in Assets.xcassets and Assets.swift in Style bundle -12. Delete the `.git` folder and run `git init`, so you're using a new repo for your project and not the template repo \ No newline at end of file +12. Delete the `.git` folder and run `git init`, so you're using a new repo for your project and not the template repo