@applicaster/quick-brick-native-apple 5.14.2-alpha.2 → 5.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apple/QuickBrickApple.podspec.json +2 -2
- package/apple/universal/ReactNative/LocalNotification/LocalNotificationBridge.swift +38 -28
- package/apple/universal/ReactNative/OfflineAssetsBridge.swift +20 -10
- package/apple/universal/ReactNative/PluginsManagerBridge.swift +37 -26
- package/apple/universal/ReactNative/ReactNativeManager.swift +2 -10
- package/apple/universal/Storages/LocalStorage/LocalStorageBridge.swift +74 -83
- package/apple/universal/Storages/SessionStorage/SessionStorageBridge.swift +45 -47
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "QuickBrickApple",
|
|
3
|
-
"version": "5.14.2
|
|
3
|
+
"version": "5.14.2",
|
|
4
4
|
"platforms": {
|
|
5
5
|
"ios": "12.0",
|
|
6
6
|
"tvos": "12.0"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"authors": "Applicaster LTD.",
|
|
17
17
|
"source": {
|
|
18
18
|
"git": "https://github.com/applicaster/Zapp-Frameworks.git",
|
|
19
|
-
"tag": "@@applicaster/quick-brick-native-apple/5.14.2
|
|
19
|
+
"tag": "@@applicaster/quick-brick-native-apple/5.14.2"
|
|
20
20
|
},
|
|
21
21
|
"requires_arc": true,
|
|
22
22
|
"source_files": "universal/**/*.{m,swift}",
|
|
@@ -13,8 +13,6 @@ import ZappCore
|
|
|
13
13
|
class LocalNotificationBridge: NSObject, RCTBridgeModule {
|
|
14
14
|
let kModuleName = "LocalNotificationBridge"
|
|
15
15
|
let LocalNotificationRecievedEvent = "localNotificationReceived"
|
|
16
|
-
let kErrorCodeFailedToScheduleLocalNotification = "FAILED_TO_SCHEDULE_LOCAL_NOTIFICATION"
|
|
17
|
-
let kErrorCodeFailedToCancelLocalNotifications = "FAILED_TO_CANCEL_LOCAL_NOTIFICATION"
|
|
18
16
|
|
|
19
17
|
static func moduleName() -> String! {
|
|
20
18
|
return "LocalNotificationBridge"
|
|
@@ -24,42 +22,54 @@ class LocalNotificationBridge: NSObject, RCTBridgeModule {
|
|
|
24
22
|
true
|
|
25
23
|
}
|
|
26
24
|
|
|
25
|
+
/// prefered thread on which to run this native module
|
|
26
|
+
@objc public var methodQueue: DispatchQueue {
|
|
27
|
+
return DispatchQueue.main
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
struct Errors {
|
|
31
|
+
static let failedToScheduleLocalNotificationCode = "FAILED_TO_SCHEDULE_LOCAL_NOTIFICATION"
|
|
32
|
+
static let failedToCancelLocalNotifications = "FAILED_TO_CANCEL_LOCAL_NOTIFICATION"
|
|
33
|
+
}
|
|
34
|
+
|
|
27
35
|
@objc func cancelLocalNotifications(_ identifiers: [String]?,
|
|
28
36
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
29
37
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
guard let identifiers = identifiers else {
|
|
39
|
+
rejecter(Errors.failedToCancelLocalNotifications,
|
|
40
|
+
nil,
|
|
41
|
+
nil)
|
|
42
|
+
return
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
FacadeConnector.connector?.localNotification?.cancel(for: identifiers, completion: { result in
|
|
46
|
+
switch result {
|
|
47
|
+
case let .success(value):
|
|
48
|
+
resolver(value)
|
|
49
|
+
case let .failure(error):
|
|
50
|
+
rejecter(Errors.failedToCancelLocalNotifications,
|
|
33
51
|
nil,
|
|
34
|
-
|
|
35
|
-
return
|
|
52
|
+
error)
|
|
36
53
|
}
|
|
37
|
-
|
|
38
|
-
FacadeConnector.connector?.localNotification?.cancelLocalNotifications(identifiers,
|
|
39
|
-
completion: { success, error in
|
|
40
|
-
success && error == nil ? resolver(success) :
|
|
41
|
-
rejecter(self.kErrorCodeFailedToCancelLocalNotifications,
|
|
42
|
-
nil,
|
|
43
|
-
error)
|
|
44
|
-
})
|
|
45
|
-
}
|
|
54
|
+
})
|
|
46
55
|
}
|
|
47
56
|
|
|
48
57
|
@objc public func presentLocalNotification(_ payload: [AnyHashable: Any]?,
|
|
49
58
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
50
59
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
FacadeConnector.connector?.localNotification?.presentLocalNotification(payload,
|
|
57
|
-
completion: { isScheduled, error in
|
|
58
|
-
isScheduled && error == nil ? resolver(isScheduled) :
|
|
59
|
-
rejecter(self.kErrorCodeFailedToScheduleLocalNotification,
|
|
60
|
-
nil,
|
|
61
|
-
error)
|
|
62
|
-
})
|
|
60
|
+
guard let payload = payload as [AnyHashable: Any]? else {
|
|
61
|
+
return
|
|
63
62
|
}
|
|
63
|
+
|
|
64
|
+
FacadeConnector.connector?.localNotification?.present(with: payload, completion: { result in
|
|
65
|
+
switch result {
|
|
66
|
+
case let .success(value):
|
|
67
|
+
resolver(value)
|
|
68
|
+
case let .failure(error):
|
|
69
|
+
rejecter(Errors.failedToScheduleLocalNotificationCode,
|
|
70
|
+
nil,
|
|
71
|
+
error)
|
|
72
|
+
}
|
|
73
|
+
})
|
|
64
74
|
}
|
|
65
75
|
}
|
|
@@ -19,6 +19,16 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
19
19
|
static let url = "url"
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
+
struct Errors {
|
|
23
|
+
static let failedToFetchCode = "failed to fetch files"
|
|
24
|
+
static let failedToFetchBody = "files arrray is empty"
|
|
25
|
+
static let unableToGetDirPathCode = "unable to get directory path"
|
|
26
|
+
static let failedToDeleteFileCode = "failed to delete file"
|
|
27
|
+
static let filePathNotProvidedBody = "File path was not provided"
|
|
28
|
+
static let fileNotExitstAtPathBody = "File not exists at path: "
|
|
29
|
+
static let failedToDeleteFileAtPathBody = "Failed to delete file at path: "
|
|
30
|
+
}
|
|
31
|
+
|
|
22
32
|
static func moduleName() -> String! {
|
|
23
33
|
return "OfflineAssetsBridge"
|
|
24
34
|
}
|
|
@@ -44,8 +54,8 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
44
54
|
let dispatchGroup = DispatchGroup()
|
|
45
55
|
|
|
46
56
|
guard let files = filesList, files.count > 0 else {
|
|
47
|
-
rejecter(
|
|
48
|
-
|
|
57
|
+
rejecter(Errors.failedToFetchCode,
|
|
58
|
+
Errors.failedToFetchBody,
|
|
49
59
|
nil)
|
|
50
60
|
return
|
|
51
61
|
}
|
|
@@ -73,7 +83,7 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
73
83
|
}
|
|
74
84
|
|
|
75
85
|
dispatchGroup.notify(queue: .main) { [unowned self] in
|
|
76
|
-
let responseObj = self.tasks.map { ["\($0.saveTo.absoluteString)": $0.state == .completed ? true : false
|
|
86
|
+
let responseObj = self.tasks.map { ["\($0.saveTo.absoluteString)": $0.state == .completed ? true : false] }
|
|
77
87
|
resolver(responseObj)
|
|
78
88
|
}
|
|
79
89
|
}
|
|
@@ -85,7 +95,7 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
85
95
|
if let folderUrl = FileManager.default.getContentFolder(appendingFolderName: folderName) {
|
|
86
96
|
resolver(folderUrl.relativePath)
|
|
87
97
|
} else {
|
|
88
|
-
rejecter(
|
|
98
|
+
rejecter(Errors.unableToGetDirPathCode,
|
|
89
99
|
"",
|
|
90
100
|
nil)
|
|
91
101
|
}
|
|
@@ -98,16 +108,16 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
98
108
|
let fileManager = FileManager.default
|
|
99
109
|
|
|
100
110
|
guard let path = path else {
|
|
101
|
-
rejecter(
|
|
102
|
-
|
|
111
|
+
rejecter(Errors.failedToDeleteFileCode,
|
|
112
|
+
Errors.filePathNotProvidedBody,
|
|
103
113
|
nil)
|
|
104
114
|
return
|
|
105
115
|
}
|
|
106
116
|
|
|
107
117
|
let url = URL(fileURLWithPath: path.replacingOccurrences(of: "file://", with: ""))
|
|
108
118
|
guard fileManager.fileExists(atPath: url.path) == true else {
|
|
109
|
-
rejecter(
|
|
110
|
-
|
|
119
|
+
rejecter(Errors.failedToDeleteFileCode,
|
|
120
|
+
Errors.fileNotExitstAtPathBody + String(describing: path),
|
|
111
121
|
nil)
|
|
112
122
|
return
|
|
113
123
|
}
|
|
@@ -122,8 +132,8 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
122
132
|
if success {
|
|
123
133
|
resolver(true)
|
|
124
134
|
} else {
|
|
125
|
-
rejecter(
|
|
126
|
-
|
|
135
|
+
rejecter(Errors.failedToDeleteFileCode,
|
|
136
|
+
Errors.failedToDeleteFileAtPathBody + path,
|
|
127
137
|
nil)
|
|
128
138
|
}
|
|
129
139
|
}
|
|
@@ -11,12 +11,6 @@ import ZappCore
|
|
|
11
11
|
|
|
12
12
|
@objc(PluginsManagerBridge)
|
|
13
13
|
class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
14
|
-
let noIdentifierErrorCode = "error_identifier_empty"
|
|
15
|
-
let noIdentifierErrorBody = "Plugin identifier is nil"
|
|
16
|
-
|
|
17
|
-
let noTypeErrorCode = "error_type_empty"
|
|
18
|
-
let noTypeErrorBody = "Plugin types is nil"
|
|
19
|
-
|
|
20
14
|
static func moduleName() -> String! {
|
|
21
15
|
return "PluginsManager"
|
|
22
16
|
}
|
|
@@ -29,21 +23,38 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
29
23
|
@objc public var methodQueue: DispatchQueue {
|
|
30
24
|
return DispatchQueue.main
|
|
31
25
|
}
|
|
26
|
+
|
|
27
|
+
struct Errors {
|
|
28
|
+
static let noIdentifierCode = "error_identifier_empty"
|
|
29
|
+
static let noIdentifierBody = "Plugin identifier is nil"
|
|
30
|
+
static let noTypeCode = "error_type_empty"
|
|
31
|
+
static let noTypeBody = "Plugin types is nil"
|
|
32
|
+
static let disablePluginCode = "disable_plugin"
|
|
33
|
+
static let disablePluginBody = "Failed to disable plugin with id: "
|
|
34
|
+
static let enablePluginCode = "enable_plugin"
|
|
35
|
+
static let enablePluginBody = "Failed to enable plugin with id: "
|
|
36
|
+
static let isPluginEnabledCode = "check_enabled_plugin"
|
|
37
|
+
static let isPluginEnabledBody = "Failed to check plugin enabled state with id: "
|
|
38
|
+
static let disablePluginsCode = "disable_all_plugins"
|
|
39
|
+
static let disablePluginsBody = "Failed to disable all plugins with type: "
|
|
40
|
+
static let enablePluginsCode = "enable_all_plugins"
|
|
41
|
+
static let enablePluginsBody = "Failed to enable all plugins with type: "
|
|
42
|
+
}
|
|
32
43
|
|
|
33
44
|
@objc public func isPluginEnabled(_ identifier: String?,
|
|
34
45
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
35
46
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
36
47
|
guard let identifier = identifier else {
|
|
37
|
-
rejecter(
|
|
38
|
-
|
|
48
|
+
rejecter(Errors.noIdentifierCode,
|
|
49
|
+
Errors.noIdentifierBody,
|
|
39
50
|
nil)
|
|
40
51
|
return
|
|
41
52
|
}
|
|
42
53
|
if let value = FacadeConnector.connector?.pluginManager?.isPluginEnabled(identifier: identifier) {
|
|
43
54
|
resolver(value)
|
|
44
55
|
} else {
|
|
45
|
-
rejecter(
|
|
46
|
-
|
|
56
|
+
rejecter(Errors.isPluginEnabledCode,
|
|
57
|
+
Errors.isPluginEnabledBody+identifier,
|
|
47
58
|
nil)
|
|
48
59
|
}
|
|
49
60
|
}
|
|
@@ -52,8 +63,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
52
63
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
53
64
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
54
65
|
guard let identifier = identifier else {
|
|
55
|
-
rejecter(
|
|
56
|
-
|
|
66
|
+
rejecter(Errors.noIdentifierCode,
|
|
67
|
+
Errors.noIdentifierBody,
|
|
57
68
|
nil)
|
|
58
69
|
return
|
|
59
70
|
}
|
|
@@ -61,8 +72,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
61
72
|
if success {
|
|
62
73
|
resolver(true)
|
|
63
74
|
} else {
|
|
64
|
-
rejecter(
|
|
65
|
-
|
|
75
|
+
rejecter(Errors.disablePluginCode,
|
|
76
|
+
Errors.disablePluginBody+identifier,
|
|
66
77
|
nil)
|
|
67
78
|
}
|
|
68
79
|
})
|
|
@@ -72,8 +83,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
72
83
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
73
84
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
74
85
|
guard let pluginType = pluginType else {
|
|
75
|
-
rejecter(
|
|
76
|
-
|
|
86
|
+
rejecter(Errors.noTypeCode,
|
|
87
|
+
Errors.noTypeBody,
|
|
77
88
|
nil)
|
|
78
89
|
return
|
|
79
90
|
}
|
|
@@ -81,8 +92,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
81
92
|
if success {
|
|
82
93
|
resolver(true)
|
|
83
94
|
} else {
|
|
84
|
-
rejecter(
|
|
85
|
-
|
|
95
|
+
rejecter(Errors.disablePluginsCode,
|
|
96
|
+
Errors.disablePluginsBody+pluginType,
|
|
86
97
|
nil)
|
|
87
98
|
}
|
|
88
99
|
|
|
@@ -93,8 +104,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
93
104
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
94
105
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
95
106
|
guard let identifier = identifier else {
|
|
96
|
-
rejecter(
|
|
97
|
-
|
|
107
|
+
rejecter(Errors.noIdentifierCode,
|
|
108
|
+
Errors.noIdentifierBody,
|
|
98
109
|
nil)
|
|
99
110
|
return
|
|
100
111
|
}
|
|
@@ -103,8 +114,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
103
114
|
if success {
|
|
104
115
|
resolver(true)
|
|
105
116
|
} else {
|
|
106
|
-
rejecter(
|
|
107
|
-
|
|
117
|
+
rejecter(Errors.enablePluginCode,
|
|
118
|
+
Errors.enablePluginBody+identifier,
|
|
108
119
|
nil)
|
|
109
120
|
}
|
|
110
121
|
|
|
@@ -115,8 +126,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
115
126
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
116
127
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
117
128
|
guard let pluginType = pluginType else {
|
|
118
|
-
rejecter(
|
|
119
|
-
|
|
129
|
+
rejecter(Errors.noTypeCode,
|
|
130
|
+
Errors.noTypeBody,
|
|
120
131
|
nil)
|
|
121
132
|
return
|
|
122
133
|
}
|
|
@@ -125,8 +136,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
125
136
|
if success {
|
|
126
137
|
resolver(true)
|
|
127
138
|
} else {
|
|
128
|
-
rejecter(
|
|
129
|
-
|
|
139
|
+
rejecter(Errors.enablePluginsCode,
|
|
140
|
+
Errors.enablePluginsBody+pluginType,
|
|
130
141
|
nil)
|
|
131
142
|
}
|
|
132
143
|
|
|
@@ -14,7 +14,6 @@ import ZappCore
|
|
|
14
14
|
|
|
15
15
|
public let kQBModuleName = "QuickBrickApp"
|
|
16
16
|
public let suspendApp = "suspend"
|
|
17
|
-
public let kQBLoadingTimeout: TimeInterval = 20
|
|
18
17
|
|
|
19
18
|
/// React Native Manager class for Quick Brick
|
|
20
19
|
open class ReactNativeManager: NSObject, UserInterfaceLayerProtocol, UserInterfaceLayerDelegate {
|
|
@@ -24,7 +23,7 @@ open class ReactNativeManager: NSObject, UserInterfaceLayerProtocol, UserInterfa
|
|
|
24
23
|
|
|
25
24
|
var launchOptions: [UIApplication.LaunchOptionsKey: Any]?
|
|
26
25
|
var reactNativePackagerRoot: String?
|
|
27
|
-
|
|
26
|
+
|
|
28
27
|
var completion: ((_ viewController: UIViewController?, _ error: Error?) -> Void)?
|
|
29
28
|
|
|
30
29
|
/// url of the react server
|
|
@@ -89,12 +88,6 @@ open class ReactNativeManager: NSObject, UserInterfaceLayerProtocol, UserInterfa
|
|
|
89
88
|
|
|
90
89
|
public func prepareLayerForUse(completion: @escaping (_ viewController: UIViewController?, _ error: Error?) -> Void) {
|
|
91
90
|
setRightToLeftFlag {
|
|
92
|
-
self.timeoutTimer = Timer.scheduledTimer(withTimeInterval: kQBLoadingTimeout,
|
|
93
|
-
repeats: false,
|
|
94
|
-
block: { _ in
|
|
95
|
-
EventsBus.post(EventsBus.Event(type: EventsBusType(.userInterfaceLayerLoadingDelayed),
|
|
96
|
-
data: self.launchOptions ?? [:]))
|
|
97
|
-
})
|
|
98
91
|
self.mountReactApp(self.launchOptions)
|
|
99
92
|
self.completion = completion
|
|
100
93
|
}
|
|
@@ -190,12 +183,11 @@ extension ReactNativeManager: RCTBridgeDelegate {
|
|
|
190
183
|
|
|
191
184
|
extension ReactNativeManager: QuickBrickManagerDelegate {
|
|
192
185
|
public func setQuickBrickReady() {
|
|
193
|
-
timeoutTimer?.invalidate()
|
|
194
186
|
completion?(reactNativeViewController(), nil)
|
|
195
187
|
completion = nil
|
|
196
188
|
}
|
|
197
189
|
|
|
198
|
-
/// Force application to move to
|
|
190
|
+
/// Force application to move to background
|
|
199
191
|
public func moveAppToBackground() {
|
|
200
192
|
DispatchQueue.main.async {
|
|
201
193
|
UIApplication.shared.perform(NSSelectorFromString(suspendApp))
|
|
@@ -10,13 +10,6 @@ import Foundation
|
|
|
10
10
|
import React
|
|
11
11
|
import ZappCore
|
|
12
12
|
|
|
13
|
-
public struct LocalErrorCallBack {
|
|
14
|
-
public static let errorCode = "LocalStorageError"
|
|
15
|
-
public static let errorMessageSet = "Local values could not be saved"
|
|
16
|
-
public static let errorMessageGet = "Local values could not be retrieved"
|
|
17
|
-
public static let errorMessageRemove = "Local values could not be removed"
|
|
18
|
-
}
|
|
19
|
-
|
|
20
13
|
@objc(LocalStorage)
|
|
21
14
|
class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
22
15
|
var bridge: RCTBridge!
|
|
@@ -29,6 +22,18 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
29
22
|
return true
|
|
30
23
|
}
|
|
31
24
|
|
|
25
|
+
/// prefered thread on which to run this native module
|
|
26
|
+
@objc public var methodQueue: DispatchQueue {
|
|
27
|
+
return DispatchQueue.main
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
struct Errors {
|
|
31
|
+
static let errorCode = "LocalErrors"
|
|
32
|
+
static let errorMessageSet = "Local storage value could not be saved"
|
|
33
|
+
static let errorMessageGet = "Local storage value could not be retrieved"
|
|
34
|
+
static let errorMessageRemove = "Local storage value could not be removed"
|
|
35
|
+
}
|
|
36
|
+
|
|
32
37
|
// MARK: RC extern methods
|
|
33
38
|
|
|
34
39
|
/// Store a stringified object in LocalStorage
|
|
@@ -42,21 +47,19 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
42
47
|
@objc public func setItem(_ key: String?, value: String?, namespace: String?,
|
|
43
48
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
44
49
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageSet, nil)
|
|
59
|
-
}
|
|
50
|
+
guard let key = key,
|
|
51
|
+
let value = value,
|
|
52
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
53
|
+
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
54
|
+
return
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
if storage.localStorageSetValue(for: key,
|
|
58
|
+
value: value,
|
|
59
|
+
namespace: namespace) == true {
|
|
60
|
+
resolver(true)
|
|
61
|
+
} else {
|
|
62
|
+
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
|
|
@@ -71,16 +74,14 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
71
74
|
namespace: String?,
|
|
72
75
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
73
76
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
return
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
let retVal = storage.localStorageValue(for: key, namespace: namespace)
|
|
82
|
-
resolver(retVal)
|
|
77
|
+
guard let key = key,
|
|
78
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
79
|
+
rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
|
|
80
|
+
return
|
|
83
81
|
}
|
|
82
|
+
|
|
83
|
+
let retVal = storage.localStorageValue(for: key, namespace: namespace)
|
|
84
|
+
resolver(retVal)
|
|
84
85
|
}
|
|
85
86
|
|
|
86
87
|
/// Remove previously saved session value by key
|
|
@@ -94,17 +95,15 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
94
95
|
namespace: String?,
|
|
95
96
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
96
97
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
return
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
let retVal = storage.localStorageRemoveValue(for: key,
|
|
105
|
-
namespace: namespace)
|
|
106
|
-
resolver(retVal)
|
|
98
|
+
guard let key = key,
|
|
99
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
100
|
+
rejecter(Errors.errorCode, Errors.errorMessageRemove, nil)
|
|
101
|
+
return
|
|
107
102
|
}
|
|
103
|
+
|
|
104
|
+
let retVal = storage.localStorageRemoveValue(for: key,
|
|
105
|
+
namespace: namespace)
|
|
106
|
+
resolver(retVal)
|
|
108
107
|
}
|
|
109
108
|
|
|
110
109
|
/// Get ALL previously saved session values
|
|
@@ -116,15 +115,13 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
116
115
|
@objc public func getAllItems(_ namespace: String?,
|
|
117
116
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
118
117
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
return
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
let retVal = storage.localStorageAllValues(namespace: namespace)
|
|
126
|
-
resolver(retVal)
|
|
118
|
+
guard let storage = FacadeConnector.connector?.storage else {
|
|
119
|
+
rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
|
|
120
|
+
return
|
|
127
121
|
}
|
|
122
|
+
|
|
123
|
+
let retVal = storage.localStorageAllValues(namespace: namespace)
|
|
124
|
+
resolver(retVal)
|
|
128
125
|
}
|
|
129
126
|
|
|
130
127
|
/// Store a stringified object in Keychain
|
|
@@ -140,21 +137,19 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
140
137
|
namespace: String?,
|
|
141
138
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
142
139
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageSet, nil)
|
|
157
|
-
}
|
|
140
|
+
guard let key = key,
|
|
141
|
+
let value = value,
|
|
142
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
143
|
+
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
144
|
+
return
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if storage.keychainStorageSetValue(for: key,
|
|
148
|
+
value: value,
|
|
149
|
+
namespace: namespace) == true {
|
|
150
|
+
resolver(true)
|
|
151
|
+
} else {
|
|
152
|
+
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
158
153
|
}
|
|
159
154
|
}
|
|
160
155
|
|
|
@@ -169,16 +164,14 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
169
164
|
namespace: String?,
|
|
170
165
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
171
166
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
return
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
let retVal = storage.keychainStorageValue(for: key, namespace: namespace)
|
|
180
|
-
resolver(retVal)
|
|
167
|
+
guard let key = key,
|
|
168
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
169
|
+
rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
|
|
170
|
+
return
|
|
181
171
|
}
|
|
172
|
+
|
|
173
|
+
let retVal = storage.keychainStorageValue(for: key, namespace: namespace)
|
|
174
|
+
resolver(retVal)
|
|
182
175
|
}
|
|
183
176
|
|
|
184
177
|
/// Remove previously saved Keychain value by key
|
|
@@ -192,16 +185,14 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
192
185
|
namespace: String?,
|
|
193
186
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
194
187
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
return
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
let retVal = storage.keychainStorageRemoveValue(for: key,
|
|
203
|
-
namespace: namespace)
|
|
204
|
-
resolver(retVal)
|
|
188
|
+
guard let key = key,
|
|
189
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
190
|
+
rejecter(Errors.errorCode, Errors.errorMessageRemove, nil)
|
|
191
|
+
return
|
|
205
192
|
}
|
|
193
|
+
|
|
194
|
+
let retVal = storage.keychainStorageRemoveValue(for: key,
|
|
195
|
+
namespace: namespace)
|
|
196
|
+
resolver(retVal)
|
|
206
197
|
}
|
|
207
198
|
}
|
|
@@ -10,13 +10,6 @@ import Foundation
|
|
|
10
10
|
import React
|
|
11
11
|
import ZappCore
|
|
12
12
|
|
|
13
|
-
public struct StorageErrorCallback {
|
|
14
|
-
public static let errorCode = "SessionStorageError"
|
|
15
|
-
public static let errorMessageSet = "Session values could not be saved"
|
|
16
|
-
public static let errorMessageGet = "Session values could not be retrieved"
|
|
17
|
-
public static let errorMessageRemove = "Session values could not be removed"
|
|
18
|
-
}
|
|
19
|
-
|
|
20
13
|
@objc(SessionStorage)
|
|
21
14
|
class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
22
15
|
var bridge: RCTBridge!
|
|
@@ -29,6 +22,18 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
29
22
|
return true
|
|
30
23
|
}
|
|
31
24
|
|
|
25
|
+
/// prefered thread on which to run this native module
|
|
26
|
+
@objc public var methodQueue: DispatchQueue {
|
|
27
|
+
return DispatchQueue.main
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
struct Errors {
|
|
31
|
+
static let errorCode = "SessionErrors"
|
|
32
|
+
static let errorMessageSet = "Session storage value could not be saved"
|
|
33
|
+
static let errorMessageGet = "Session storage value could not be retrieved"
|
|
34
|
+
static let errorMessageRemove = "Session storage value could not be removed"
|
|
35
|
+
}
|
|
36
|
+
|
|
32
37
|
// MARK: RC extern methods
|
|
33
38
|
|
|
34
39
|
/// Store a stringified object in SessionStorage
|
|
@@ -42,21 +47,19 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
42
47
|
@objc public func setItem(_ key: String?, value: String?, namespace: String?,
|
|
43
48
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
44
49
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
50
|
+
guard let key = key,
|
|
51
|
+
let value = value,
|
|
52
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
53
|
+
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
54
|
+
return
|
|
55
|
+
}
|
|
52
56
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
57
|
+
if storage.sessionStorageSetValue(for: key,
|
|
58
|
+
value: value,
|
|
59
|
+
namespace: namespace) == true {
|
|
60
|
+
resolver(true)
|
|
61
|
+
} else {
|
|
62
|
+
rejecter(Errors.errorCode, Errors.errorMessageSet, nil)
|
|
60
63
|
}
|
|
61
64
|
}
|
|
62
65
|
|
|
@@ -70,16 +73,15 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
70
73
|
@objc public func getItem(_ key: String?, namespace: String?,
|
|
71
74
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
72
75
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
let retVal = storage.sessionStorageValue(for: key, namespace: namespace)
|
|
81
|
-
resolver(retVal)
|
|
76
|
+
guard let key = key,
|
|
77
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
78
|
+
rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
|
|
79
|
+
return
|
|
82
80
|
}
|
|
81
|
+
|
|
82
|
+
let retVal = storage.sessionStorageValue(for: key,
|
|
83
|
+
namespace: namespace)
|
|
84
|
+
resolver(retVal)
|
|
83
85
|
}
|
|
84
86
|
|
|
85
87
|
/// Remove previously saved session value by key
|
|
@@ -93,17 +95,15 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
93
95
|
namespace: String?,
|
|
94
96
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
95
97
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
return
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
let retVal = storage.sessionStorageRemoveValue(for: key,
|
|
104
|
-
namespace: namespace)
|
|
105
|
-
resolver(retVal)
|
|
98
|
+
guard let key = key,
|
|
99
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
100
|
+
rejecter(Errors.errorCode, Errors.errorMessageRemove, nil)
|
|
101
|
+
return
|
|
106
102
|
}
|
|
103
|
+
|
|
104
|
+
let retVal = storage.sessionStorageRemoveValue(for: key,
|
|
105
|
+
namespace: namespace)
|
|
106
|
+
resolver(retVal)
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
/// Get ALL previously saved session values
|
|
@@ -115,13 +115,11 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
115
115
|
@objc public func getAllItems(_ namespace: String?,
|
|
116
116
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
117
117
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
return
|
|
122
|
-
}
|
|
123
|
-
let retVal = storage.sessionStorageAllValues(namespace: namespace)
|
|
124
|
-
resolver(retVal)
|
|
118
|
+
guard let storage = FacadeConnector.connector?.storage else {
|
|
119
|
+
rejecter(Errors.errorCode, Errors.errorMessageGet, nil)
|
|
120
|
+
return
|
|
125
121
|
}
|
|
122
|
+
let retVal = storage.sessionStorageAllValues(namespace: namespace)
|
|
123
|
+
resolver(retVal)
|
|
126
124
|
}
|
|
127
125
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/quick-brick-native-apple",
|
|
3
|
-
"version": "5.14.2
|
|
3
|
+
"version": "5.14.2",
|
|
4
4
|
"description": "iOS and tvOS native code for QuickBrick applications. This package is used to provide native logic for QuickBrick",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "echo \"Error: no test specified\" && exit 1"
|