Compare commits
18 Commits
feature/at
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e1581e28e | ||
|
|
8f2483eb1b | ||
|
|
12d17dbca8 | ||
|
|
c360c75512 | ||
|
|
d57a86e140 | ||
|
|
214ccfd8f6 | ||
|
|
31aa1d6df7 | ||
|
|
817d7900f4 | ||
|
|
4b35a8bb2d | ||
|
|
a29fa60e5e | ||
|
|
3103f8dd89 | ||
|
|
2b36711bca | ||
|
|
a570f3c0e6 | ||
|
|
038fb8cdf7 | ||
|
|
dd2b0f9de5 | ||
|
|
d61cb6cfb9 | ||
|
|
cf3d7810d4 | ||
|
|
3c8af09752 |
@ -1113,7 +1113,7 @@
|
||||
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../../SharedFrameworks";
|
||||
INFOPLIST_FILE = MVMCore/Info.plist;
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||
MARKETING_VERSION = 3.1;
|
||||
@ -1140,7 +1140,7 @@
|
||||
FRAMEWORK_SEARCH_PATHS = "$(PROJECT_DIR)/../../SharedFrameworks";
|
||||
INFOPLIST_FILE = MVMCore/Info.plist;
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
LIBRARY_SEARCH_PATHS = "$(inherited)";
|
||||
MARKETING_VERSION = 3.1;
|
||||
|
||||
@ -86,7 +86,7 @@ open class ActionOpenPageHandler: MVMCoreJSONActionHandlerProtocol {
|
||||
let fetchedParameters = await ClientParameterHandler().getClientParameters(
|
||||
with: parametersToFetch,
|
||||
requestParameters: requestParameters.parameters as? [String : Any] ?? [:],
|
||||
actionId: MVMCoreActionHandler.getUUID(additionalData: additionalData) ?? "unknown",
|
||||
actionId: actionUUID,
|
||||
showLoadingOverlay: !requestParameters.backgroundRequest) {
|
||||
requestParameters.add(fetchedParameters)
|
||||
}
|
||||
|
||||
@ -25,11 +25,16 @@ open class ActionRestartHandler: MVMCoreActionHandlerProtocol {
|
||||
return
|
||||
}
|
||||
continuation.resume(throwing: MVMCoreError.errorObject(error))
|
||||
} else {
|
||||
// Restarts the app (forcing any passed in page types).
|
||||
MVMCoreSessionObject.sharedGlobal()?.restartSession(withPageType: model.pageType, request: model.requestURL, parameters: model.extraParameters?.toJSON(), clearAllVariables: true)
|
||||
continuation.resume()
|
||||
return
|
||||
}
|
||||
if let sessionObject = MVMCoreSessionObject.sharedGlobal() {
|
||||
if model.hardReset {
|
||||
sessionObject.clearPersistentCache()
|
||||
}
|
||||
// Restarts the app (forcing any passed in page types).
|
||||
sessionObject.restartSession(withPageType: model.pageType, request: model.requestURL, parameters: model.extraParameters?.toJSON(), clearAllVariables: true)
|
||||
}
|
||||
continuation.resume()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,6 +16,7 @@ public struct ActionRestartModel: ActionModelProtocol {
|
||||
public static var identifier: String = "restart"
|
||||
public var actionType: String = ActionRestartModel.identifier
|
||||
public var requestURL: URL?
|
||||
@DecodableDefault.True public var hardReset: Bool
|
||||
public var extraParameters: JSONValueDictionary?
|
||||
public var analyticsData: JSONValueDictionary?
|
||||
|
||||
@ -26,11 +27,12 @@ public struct ActionRestartModel: ActionModelProtocol {
|
||||
// MARK: - Initializer
|
||||
//--------------------------------------------------
|
||||
|
||||
public init(_ pageType: String? = nil, _ requestUrl: URL? = nil, _ extraParameters: JSONValueDictionary? = nil, _ analyticsData: JSONValueDictionary? = nil) {
|
||||
public init(_ pageType: String? = nil, _ requestUrl: URL? = nil, hardReset: Bool? = nil, _ extraParameters: JSONValueDictionary? = nil, _ analyticsData: JSONValueDictionary? = nil) {
|
||||
self.pageType = pageType
|
||||
self.requestURL = requestUrl
|
||||
self.extraParameters = extraParameters
|
||||
self.analyticsData = analyticsData
|
||||
self.hardReset = hardReset ?? true
|
||||
}
|
||||
|
||||
public func isEqual(to model: any ModelComparisonProtocol) -> Bool {
|
||||
@ -39,5 +41,6 @@ public struct ActionRestartModel: ActionModelProtocol {
|
||||
&& analyticsData == model.analyticsData
|
||||
&& requestURL == model.requestURL
|
||||
&& pageType == model.pageType
|
||||
&& hardReset == model.hardReset
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,7 +158,7 @@ public protocol MVMCoreJSONActionHandlerProtocol: MVMCoreActionHandlerProtocol {
|
||||
errorObject.requestUrl = browserUrl
|
||||
}
|
||||
if let humanReadableMessage = (error as? HumanReadableDecodingErrorProtocol)?.readableDescription {
|
||||
errorObject.messageToLog = humanReadableMessage
|
||||
errorObject.messageToLog = "Failed to decode the \(actionType ?? "") action model. " + humanReadableMessage
|
||||
}
|
||||
defaultHandleActionError(errorObject, additionalData: additionalData)
|
||||
}
|
||||
|
||||
@ -52,7 +52,7 @@
|
||||
|
||||
- (void)getJsonData:(nonnull MVMCoreRequestParameters *)requestParameters forUrl:(nonnull NSURL *)url completion:(nonnull void (^)(NSData * _Nullable data, MVMCoreErrorObject *_Nullable error))completion;
|
||||
|
||||
- (void)getInitialParametersExcludingSections:(NSSet<NSString *> *_Nullable)excludeSections completion:(nonnull void (^)(NSDictionary *_Nullable parameters))completion NS_SWIFT_NAME(initialParameters(excludingSections:completion:));
|
||||
- (void)getInitialParametersExcludingSections:(NSSet<NSString *> *_Nullable)excludeSections actionId:(nonnull NSString *)actionId completion:(nonnull void (^)(NSDictionary *_Nullable parameters))completion NS_SWIFT_NAME(initialParameters(excludingSections:actionId:completion:));
|
||||
|
||||
// Creates a request object with the given parameters.
|
||||
- (void)transformToRequestWithParameters:(nonnull MVMCoreRequestParameters *)requestParameters completion:(nonnull void (^)(NSURLRequest * _Nullable request, MVMCoreErrorObject *_Nullable error))completion;
|
||||
|
||||
@ -190,7 +190,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void)getInitialParametersExcludingSections:(NSSet<NSString *> *_Nullable)excludeSections completion:(nonnull void (^)(NSDictionary *_Nullable parameters))closure {}
|
||||
- (void)getInitialParametersExcludingSections:(NSSet<NSString *> *)excludeSections actionId:(NSString *)actionId completion:(void (^)(NSDictionary * _Nullable))completion {}
|
||||
|
||||
- (void)getJsonDictionary:(nonnull MVMCoreRequestParameters *)requestParameters completion:(nonnull void (^)(NSDictionary * _Nullable jsonDictionary))completion {
|
||||
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
|
||||
@ -206,7 +206,7 @@
|
||||
}
|
||||
|
||||
// Sets up the Initial parameters.
|
||||
[self getInitialParametersExcludingSections:requestParameters.excludedInitialParameters completion:^(NSDictionary * _Nullable initialParameters) {
|
||||
[self getInitialParametersExcludingSections:requestParameters.excludedInitialParameters actionId:requestParameters.identifier ?: [NSUUID UUID].UUIDString completion:^(NSDictionary * _Nullable initialParameters) {
|
||||
if (initialParameters) {
|
||||
[parameters setObject:initialParameters forKey:@"InitialParams"];
|
||||
}
|
||||
|
||||
@ -686,7 +686,16 @@
|
||||
|
||||
if (obj && [obj isKindOfClass:[NSDictionary class]]) {
|
||||
NSDictionary *responseInfo = [obj dict:KeyResponseInfo];
|
||||
if (![ValueTypeSuccess isEqualToString:[responseInfo string:KeyType]]) {
|
||||
//Response Info is missing but errorObject should be created with generic message + code + domain
|
||||
if (responseInfo == nil) {
|
||||
errorObject = [[MVMCoreLoadHandler sharedGlobal]
|
||||
errorForLoadObject:loadObject
|
||||
withTitle:nil
|
||||
message:[MVMCoreGetterUtility hardcodedStringWithKey:HardcodedErrorCritical]
|
||||
messageToLog:[NSString stringWithFormat:@"Module %@ is missing a %@ object.", key, KeyResponseInfo]
|
||||
code:ErrorCodeJSONNotDictionary
|
||||
domain:ErrorDomainServer];
|
||||
} else if (![ValueTypeSuccess isEqualToString:[responseInfo string:KeyType]]) {
|
||||
errorObject = [[MVMCoreLoadHandler sharedGlobal] attachLoadInformation:loadObject toError:
|
||||
[[MVMCoreErrorObject alloc]
|
||||
initWithTitle:[responseInfo stringForKey:KeyErrorHeading]
|
||||
@ -696,7 +705,6 @@
|
||||
domain:ErrorDomainServer
|
||||
location:[[MVMCoreLoadHandler sharedGlobal] errorLocationForRequest:loadObject]]];
|
||||
}
|
||||
|
||||
// Caches each dictionary from the array.
|
||||
[[MVMCoreCache sharedCache] addModuleToCache:obj module:key queue:nil waitUntilFinished:YES completionBlock:NULL];
|
||||
} else {
|
||||
|
||||
@ -70,9 +70,35 @@ import os
|
||||
#endif
|
||||
}
|
||||
|
||||
open func handleWarningMessage(_ message: String, category: String?) {
|
||||
#if LOGGING
|
||||
guard message.count < 1024 else {
|
||||
getLogger(category: category).warning("\(message.prefix(300), privacy: .public)... <stdio>") // Send initial log to console.
|
||||
print(message) // Print the whole on stdout.
|
||||
return
|
||||
}
|
||||
getLogger(category: category).warning("\(message, privacy: .public)") // Assume that becaues this is a LOGGING build we want these messages to be unmasked.
|
||||
#endif
|
||||
}
|
||||
|
||||
open func handleErrorMessage(_ message: String, category: String?) {
|
||||
#if LOGGING
|
||||
guard message.count < 1024 else {
|
||||
getLogger(category: category).error("\(message.prefix(300), privacy: .public)... <stdio>") // Send initial log to console.
|
||||
print(message) // Print the whole on stdout.
|
||||
return
|
||||
}
|
||||
getLogger(category: category).error("\(message, privacy: .public)") // Assume that becaues this is a LOGGING build we want these messages to be unmasked.
|
||||
#endif
|
||||
}
|
||||
|
||||
@objc(addErrorToLog:)
|
||||
open func addError(toLog errorObject: MVMCoreErrorObject) {
|
||||
// Subclass to handle.
|
||||
if errorObject.silentError {
|
||||
handleWarningMessage(errorObject.messageToLog ?? errorObject.messageToDisplay ?? "Some error occurred.", category: "Handled Exception")
|
||||
} else {
|
||||
handleErrorMessage(errorObject.messageToLog ?? errorObject.messageToDisplay ?? "Some error occurred.", category: "Handled Exception")
|
||||
}
|
||||
}
|
||||
|
||||
open func logLoadFinished(_ loadObject: MVMCoreLoadObject?, loadedViewController: MVMCoreViewControllerProtocol?, error: MVMCoreErrorObject?) {}
|
||||
|
||||
@ -38,6 +38,9 @@
|
||||
/// Clears the session singleton. Creates a new session NSURLSession also.
|
||||
- (void)clearSessionObject;
|
||||
|
||||
/// Clears any persistent cache related to the current session.
|
||||
- (void)clearPersistentCache;
|
||||
|
||||
/// Copys string to clipboard and assigns self.clipboardString for validation
|
||||
/// Should only be used when expected string is a secure string
|
||||
-(void)copyStringToClipboard :(nullable NSString *)clipboardString;
|
||||
|
||||
@ -53,4 +53,6 @@
|
||||
self.session = [self createNSURLSession];
|
||||
}
|
||||
|
||||
- (void)clearPersistentCache {}
|
||||
|
||||
@end
|
||||
|
||||
@ -23,8 +23,10 @@
|
||||
// Initialization code
|
||||
self.title = title;
|
||||
self.messageToDisplay = message;
|
||||
self.messageToLog = message;
|
||||
self.code = code;
|
||||
self.domain = domain;
|
||||
self.systemDomain = nil;
|
||||
self.location = location;
|
||||
self.date = [NSDate date];
|
||||
self.silentError = YES;
|
||||
@ -32,6 +34,11 @@
|
||||
[MVMCoreDispatchUtility performSyncBlockOnMainThread:^{
|
||||
self.applicationState = [UIApplication sharedApplication].applicationState;
|
||||
}];
|
||||
self.sessionId = nil;
|
||||
self.requestId = nil;
|
||||
self.requestUrl = nil;
|
||||
self.serverResponseInfo = nil;
|
||||
self.crashLog = nil;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@ -41,9 +48,11 @@
|
||||
if (self = [super init]) {
|
||||
// Initialization code
|
||||
self.title = title;
|
||||
self.messageToDisplay = nil;
|
||||
self.messageToLog = messageToLog;
|
||||
self.code = code;
|
||||
self.domain = domain;
|
||||
self.systemDomain = nil;
|
||||
self.location = location;
|
||||
self.date = [NSDate date];
|
||||
self.silentError = YES;
|
||||
@ -51,6 +60,11 @@
|
||||
[MVMCoreDispatchUtility performSyncBlockOnMainThread:^{
|
||||
self.applicationState = [UIApplication sharedApplication].applicationState;
|
||||
}];
|
||||
self.sessionId = nil;
|
||||
self.requestId = nil;
|
||||
self.requestUrl = nil;
|
||||
self.serverResponseInfo = nil;
|
||||
self.crashLog = nil;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ extension ModelRegistry.Error: HumanReadableDecodingErrorProtocol {
|
||||
public var readableDescription: String {
|
||||
switch (self) {
|
||||
case .decoderErrorModelNotMapped(let identifier, let codingKey, let codingPath) where identifier != nil && codingKey != nil && codingPath != nil:
|
||||
return "Model identifier \"\(identifier!)\" is not mapped for \"\(codingKey!.stringValue)\" @ \(codingPath!.map { return $0.stringValue })"
|
||||
return "Model identifier \"\(identifier!)\" is not mapped for \"\(codingKey!.stringValue)\" @ \(codingPath!.map { return $0.stringValue })"
|
||||
|
||||
case .decoderErrorObjectNotPresent(let codingKey, let codingPath):
|
||||
return "Required model \"\(codingKey.stringValue)\" was not found @ \(codingPath.map { return $0.stringValue })"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user