72 lines
1.8 KiB
Swift
72 lines
1.8 KiB
Swift
// Copyright 2015-present 650 Industries. All rights reserved.
|
|
|
|
import Foundation
|
|
|
|
@objc
|
|
public class EXDevLauncherErrorInstance: NSObject {
|
|
@objc
|
|
public let timestamp: Int64
|
|
@objc
|
|
public let message: String
|
|
@objc
|
|
public let stack: String
|
|
|
|
init(timestamp: Int64, message: String, stack: String) {
|
|
self.timestamp = timestamp
|
|
self.message = message
|
|
self.stack = stack
|
|
}
|
|
|
|
@objc
|
|
public func toDict() -> [String: Any] {
|
|
return [
|
|
"timestamp": timestamp,
|
|
"message": message,
|
|
"stack": stack
|
|
]
|
|
}
|
|
}
|
|
|
|
@objc
|
|
public class EXDevLauncherErrorRegistry: NSObject {
|
|
private static let Key = "expo.modules.devlauncher.errorregistry.SavedError"
|
|
|
|
@objc
|
|
public func storeException(_ exception: NSException) {
|
|
let defaults = UserDefaults.standard
|
|
defaults.set([
|
|
"timestamp": getCurrentTimestamp(),
|
|
"message": exception.description,
|
|
"stack": exception.callStackSymbols.joined(separator: "\n")
|
|
], forKey: EXDevLauncherErrorRegistry.Key)
|
|
}
|
|
|
|
@objc
|
|
public func consumeException() -> EXDevLauncherErrorInstance? {
|
|
let defaults = UserDefaults.standard
|
|
guard let savedException = defaults.dictionary(forKey: EXDevLauncherErrorRegistry.Key) else {
|
|
return nil
|
|
}
|
|
|
|
defaults.removeObject(forKey: EXDevLauncherErrorRegistry.Key)
|
|
|
|
guard let timestamp = savedException["timestamp"] as? Int64 else {
|
|
return nil
|
|
}
|
|
|
|
guard let message = savedException["message"] as? String else {
|
|
return nil
|
|
}
|
|
|
|
guard let stack = savedException["stack"] as? String else {
|
|
return nil
|
|
}
|
|
|
|
return EXDevLauncherErrorInstance(timestamp: timestamp, message: message, stack: stack)
|
|
}
|
|
|
|
private func getCurrentTimestamp() -> Int64 {
|
|
return Int64(Date().timeIntervalSince1970 * 1000)
|
|
}
|
|
}
|