@applicaster/quick-brick-native-apple 5.14.2 → 5.15.0-alpha.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 +28 -38
- package/apple/universal/ReactNative/OfflineAssetsBridge.swift +10 -20
- package/apple/universal/ReactNative/PluginsManagerBridge.swift +26 -37
- package/apple/universal/ReactNative/ReactNativeCommunicationModule.swift +57 -1
- package/apple/universal/ReactNative/ReactNativeManager.swift +2 -2
- package/apple/universal/ReactNative/ReactNativeModulesExports.m +4 -1
- package/apple/universal/Storages/LocalStorage/LocalStorageBridge.swift +83 -74
- package/apple/universal/Storages/SessionStorage/SessionStorageBridge.swift +47 -45
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "QuickBrickApple",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.15.0-alpha.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.
|
|
19
|
+
"tag": "@@applicaster/quick-brick-native-apple/5.15.0-alpha.2"
|
|
20
20
|
},
|
|
21
21
|
"requires_arc": true,
|
|
22
22
|
"source_files": "universal/**/*.{m,swift}",
|
|
@@ -13,6 +13,8 @@ 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"
|
|
16
18
|
|
|
17
19
|
static func moduleName() -> String! {
|
|
18
20
|
return "LocalNotificationBridge"
|
|
@@ -22,54 +24,42 @@ class LocalNotificationBridge: NSObject, RCTBridgeModule {
|
|
|
22
24
|
true
|
|
23
25
|
}
|
|
24
26
|
|
|
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
|
-
|
|
35
27
|
@objc func cancelLocalNotifications(_ identifiers: [String]?,
|
|
36
28
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
37
29
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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,
|
|
30
|
+
DispatchQueue.main.async {
|
|
31
|
+
guard let identifiers = identifiers else {
|
|
32
|
+
rejecter(self.kErrorCodeFailedToCancelLocalNotifications,
|
|
51
33
|
nil,
|
|
52
|
-
|
|
34
|
+
nil)
|
|
35
|
+
return
|
|
53
36
|
}
|
|
54
|
-
|
|
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
|
+
}
|
|
55
46
|
}
|
|
56
47
|
|
|
57
48
|
@objc public func presentLocalNotification(_ payload: [AnyHashable: Any]?,
|
|
58
49
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
59
50
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
60
|
-
|
|
61
|
-
|
|
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)
|
|
51
|
+
DispatchQueue.main.async {
|
|
52
|
+
guard let payload = payload as [AnyHashable: Any]? else {
|
|
53
|
+
return
|
|
72
54
|
}
|
|
73
|
-
|
|
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
|
+
})
|
|
63
|
+
}
|
|
74
64
|
}
|
|
75
65
|
}
|
|
@@ -19,16 +19,6 @@ 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
|
-
|
|
32
22
|
static func moduleName() -> String! {
|
|
33
23
|
return "OfflineAssetsBridge"
|
|
34
24
|
}
|
|
@@ -54,8 +44,8 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
54
44
|
let dispatchGroup = DispatchGroup()
|
|
55
45
|
|
|
56
46
|
guard let files = filesList, files.count > 0 else {
|
|
57
|
-
rejecter(
|
|
58
|
-
|
|
47
|
+
rejecter("failed to fetch files",
|
|
48
|
+
"files arrray is empty",
|
|
59
49
|
nil)
|
|
60
50
|
return
|
|
61
51
|
}
|
|
@@ -83,7 +73,7 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
83
73
|
}
|
|
84
74
|
|
|
85
75
|
dispatchGroup.notify(queue: .main) { [unowned self] in
|
|
86
|
-
let responseObj = self.tasks.map { ["\($0.saveTo.absoluteString)": $0.state == .completed ? true : false] }
|
|
76
|
+
let responseObj = self.tasks.map { ["\($0.saveTo.absoluteString)": $0.state == .completed ? true : false ] }
|
|
87
77
|
resolver(responseObj)
|
|
88
78
|
}
|
|
89
79
|
}
|
|
@@ -95,7 +85,7 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
95
85
|
if let folderUrl = FileManager.default.getContentFolder(appendingFolderName: folderName) {
|
|
96
86
|
resolver(folderUrl.relativePath)
|
|
97
87
|
} else {
|
|
98
|
-
rejecter(
|
|
88
|
+
rejecter("unable to get directory path",
|
|
99
89
|
"",
|
|
100
90
|
nil)
|
|
101
91
|
}
|
|
@@ -108,16 +98,16 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
108
98
|
let fileManager = FileManager.default
|
|
109
99
|
|
|
110
100
|
guard let path = path else {
|
|
111
|
-
rejecter(
|
|
112
|
-
|
|
101
|
+
rejecter("failed to delete file",
|
|
102
|
+
"File path was not provided",
|
|
113
103
|
nil)
|
|
114
104
|
return
|
|
115
105
|
}
|
|
116
106
|
|
|
117
107
|
let url = URL(fileURLWithPath: path.replacingOccurrences(of: "file://", with: ""))
|
|
118
108
|
guard fileManager.fileExists(atPath: url.path) == true else {
|
|
119
|
-
rejecter(
|
|
120
|
-
|
|
109
|
+
rejecter("failed to delete file",
|
|
110
|
+
"File not exists at path: \(String(describing: path))",
|
|
121
111
|
nil)
|
|
122
112
|
return
|
|
123
113
|
}
|
|
@@ -132,8 +122,8 @@ class OfflineAssetsBridge: NSObject, RCTBridgeModule {
|
|
|
132
122
|
if success {
|
|
133
123
|
resolver(true)
|
|
134
124
|
} else {
|
|
135
|
-
rejecter(
|
|
136
|
-
|
|
125
|
+
rejecter("failed to delete file",
|
|
126
|
+
"Failed to delete file at path: \(path)",
|
|
137
127
|
nil)
|
|
138
128
|
}
|
|
139
129
|
}
|
|
@@ -11,6 +11,12 @@ 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
|
+
|
|
14
20
|
static func moduleName() -> String! {
|
|
15
21
|
return "PluginsManager"
|
|
16
22
|
}
|
|
@@ -23,38 +29,21 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
23
29
|
@objc public var methodQueue: DispatchQueue {
|
|
24
30
|
return DispatchQueue.main
|
|
25
31
|
}
|
|
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
|
-
}
|
|
43
32
|
|
|
44
33
|
@objc public func isPluginEnabled(_ identifier: String?,
|
|
45
34
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
46
35
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
47
36
|
guard let identifier = identifier else {
|
|
48
|
-
rejecter(
|
|
49
|
-
|
|
37
|
+
rejecter(noIdentifierErrorCode,
|
|
38
|
+
noIdentifierErrorBody,
|
|
50
39
|
nil)
|
|
51
40
|
return
|
|
52
41
|
}
|
|
53
42
|
if let value = FacadeConnector.connector?.pluginManager?.isPluginEnabled(identifier: identifier) {
|
|
54
43
|
resolver(value)
|
|
55
44
|
} else {
|
|
56
|
-
rejecter(
|
|
57
|
-
|
|
45
|
+
rejecter("enable_plugins",
|
|
46
|
+
"Failed to check plugin enabled state with id:\(identifier)",
|
|
58
47
|
nil)
|
|
59
48
|
}
|
|
60
49
|
}
|
|
@@ -63,8 +52,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
63
52
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
64
53
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
65
54
|
guard let identifier = identifier else {
|
|
66
|
-
rejecter(
|
|
67
|
-
|
|
55
|
+
rejecter(noIdentifierErrorCode,
|
|
56
|
+
noIdentifierErrorBody,
|
|
68
57
|
nil)
|
|
69
58
|
return
|
|
70
59
|
}
|
|
@@ -72,8 +61,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
72
61
|
if success {
|
|
73
62
|
resolver(true)
|
|
74
63
|
} else {
|
|
75
|
-
rejecter(
|
|
76
|
-
|
|
64
|
+
rejecter("disable_plugins",
|
|
65
|
+
"Failed to enable plugin with id:\(identifier)",
|
|
77
66
|
nil)
|
|
78
67
|
}
|
|
79
68
|
})
|
|
@@ -83,8 +72,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
83
72
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
84
73
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
85
74
|
guard let pluginType = pluginType else {
|
|
86
|
-
rejecter(
|
|
87
|
-
|
|
75
|
+
rejecter(noTypeErrorCode,
|
|
76
|
+
noTypeErrorBody,
|
|
88
77
|
nil)
|
|
89
78
|
return
|
|
90
79
|
}
|
|
@@ -92,8 +81,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
92
81
|
if success {
|
|
93
82
|
resolver(true)
|
|
94
83
|
} else {
|
|
95
|
-
rejecter(
|
|
96
|
-
|
|
84
|
+
rejecter("disable_all_plugins",
|
|
85
|
+
"Failed to disable all plugins with type:\(pluginType)",
|
|
97
86
|
nil)
|
|
98
87
|
}
|
|
99
88
|
|
|
@@ -104,8 +93,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
104
93
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
105
94
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
106
95
|
guard let identifier = identifier else {
|
|
107
|
-
rejecter(
|
|
108
|
-
|
|
96
|
+
rejecter(noIdentifierErrorCode,
|
|
97
|
+
noIdentifierErrorBody,
|
|
109
98
|
nil)
|
|
110
99
|
return
|
|
111
100
|
}
|
|
@@ -114,8 +103,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
114
103
|
if success {
|
|
115
104
|
resolver(true)
|
|
116
105
|
} else {
|
|
117
|
-
rejecter(
|
|
118
|
-
|
|
106
|
+
rejecter("enable_plugins",
|
|
107
|
+
"Failed to enable plugin with id:\(identifier)",
|
|
119
108
|
nil)
|
|
120
109
|
}
|
|
121
110
|
|
|
@@ -126,8 +115,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
126
115
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
127
116
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
128
117
|
guard let pluginType = pluginType else {
|
|
129
|
-
rejecter(
|
|
130
|
-
|
|
118
|
+
rejecter(noTypeErrorCode,
|
|
119
|
+
noTypeErrorBody,
|
|
131
120
|
nil)
|
|
132
121
|
return
|
|
133
122
|
}
|
|
@@ -136,8 +125,8 @@ class PluginsManagerBridge: NSObject, RCTBridgeModule {
|
|
|
136
125
|
if success {
|
|
137
126
|
resolver(true)
|
|
138
127
|
} else {
|
|
139
|
-
rejecter(
|
|
140
|
-
|
|
128
|
+
rejecter("enable_all_plugins",
|
|
129
|
+
"Failed to enable all plugins with type:\(pluginType)",
|
|
141
130
|
nil)
|
|
142
131
|
}
|
|
143
132
|
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
import Foundation
|
|
10
10
|
import os.log
|
|
11
11
|
import React
|
|
12
|
+
import ZappCore
|
|
12
13
|
|
|
13
14
|
let kQuickBrickCommunicationModule = "QuickBrickCommunicationModule"
|
|
14
15
|
|
|
@@ -16,6 +17,16 @@ let kQuickBrickCommunicationModule = "QuickBrickCommunicationModule"
|
|
|
16
17
|
Events Supported by the QuickBrickManager native module
|
|
17
18
|
In order to add events, add a case, and add the invoke the appropriate handler in the invokeHandler method
|
|
18
19
|
*/
|
|
20
|
+
|
|
21
|
+
struct ReactNativeCommunicationModuleError {
|
|
22
|
+
public static let errorCode = "ReactNativeCommunicationModuleError"
|
|
23
|
+
public static let languageIsUndefined = "Language value is undefined"
|
|
24
|
+
public static let languageIsEmpty = "Language value is empty"
|
|
25
|
+
public static let localStorageNotAccessible = "Can not access Local Storage"
|
|
26
|
+
public static let unableToSaveToLocalStorage = "Unable to save value to Local Storage"
|
|
27
|
+
public static let unableToUseDelegateManager = "Unable to use delegate manager"
|
|
28
|
+
}
|
|
29
|
+
|
|
19
30
|
enum Events: String {
|
|
20
31
|
case quickBrickReady
|
|
21
32
|
case moveAppToBackground
|
|
@@ -45,7 +56,7 @@ enum Events: String {
|
|
|
45
56
|
case .forceAppReload:
|
|
46
57
|
manager.forceAppReload()
|
|
47
58
|
case .setPrefersHomeIndicatorAutoHidden:
|
|
48
|
-
|
|
59
|
+
manager.setPrefersHomeIndicatorAutoHidden(payload)
|
|
49
60
|
}
|
|
50
61
|
}
|
|
51
62
|
}
|
|
@@ -123,4 +134,49 @@ class ReactNativeCommunicationModule: NSObject, RCTBridgeModule {
|
|
|
123
134
|
|
|
124
135
|
event?.invokeHandler(manager: delegateManager, payload: payload ?? [:])
|
|
125
136
|
}
|
|
137
|
+
|
|
138
|
+
@objc func setAppLanguage(_ language: String?,
|
|
139
|
+
resolver: @escaping RCTPromiseResolveBlock,
|
|
140
|
+
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
141
|
+
let storageKey = "forcedLanguageCode"
|
|
142
|
+
|
|
143
|
+
guard let language = language else {
|
|
144
|
+
rejecter(ReactNativeCommunicationModuleError.errorCode,
|
|
145
|
+
ReactNativeCommunicationModuleError.languageIsUndefined,
|
|
146
|
+
nil)
|
|
147
|
+
return
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
guard !language.isEmpty else {
|
|
151
|
+
rejecter(ReactNativeCommunicationModuleError.errorCode,
|
|
152
|
+
ReactNativeCommunicationModuleError.languageIsEmpty,
|
|
153
|
+
nil)
|
|
154
|
+
return
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
guard let delegateManager = self.delegateManager else {
|
|
158
|
+
rejecter(ReactNativeCommunicationModuleError.errorCode,
|
|
159
|
+
ReactNativeCommunicationModuleError.unableToUseDelegateManager, nil)
|
|
160
|
+
return
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
DispatchQueue.main.async {
|
|
164
|
+
guard let storage = FacadeConnector.connector?.storage else {
|
|
165
|
+
rejecter(ReactNativeCommunicationModuleError.errorCode,
|
|
166
|
+
ReactNativeCommunicationModuleError.localStorageNotAccessible, nil)
|
|
167
|
+
return
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if storage.localStorageSetValue(for: storageKey,
|
|
171
|
+
value: language,
|
|
172
|
+
namespace: nil) == true {
|
|
173
|
+
resolver(true)
|
|
174
|
+
} else {
|
|
175
|
+
rejecter(ReactNativeCommunicationModuleError.errorCode,
|
|
176
|
+
ReactNativeCommunicationModuleError.unableToSaveToLocalStorage, nil)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
delegateManager.forceAppReload()
|
|
180
|
+
}
|
|
181
|
+
}
|
|
126
182
|
}
|
|
@@ -187,7 +187,7 @@ extension ReactNativeManager: QuickBrickManagerDelegate {
|
|
|
187
187
|
completion = nil
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
-
/// Force application to move to
|
|
190
|
+
/// Force application to move to bakckground
|
|
191
191
|
public func moveAppToBackground() {
|
|
192
192
|
DispatchQueue.main.async {
|
|
193
193
|
UIApplication.shared.perform(NSSelectorFromString(suspendApp))
|
|
@@ -226,4 +226,4 @@ extension ReactNativeManager: QuickBrickManagerDelegate {
|
|
|
226
226
|
public func forceAppReload() {
|
|
227
227
|
EventsBus.post(EventsBus.Event(type: EventsBusType(.forceAppReload)))
|
|
228
228
|
}
|
|
229
|
-
}
|
|
229
|
+
}
|
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
RCT_EXTERN_METHOD(quickBrickEvent:(NSString *)eventName
|
|
14
14
|
payload:(NSDictionary *)payload);
|
|
15
15
|
|
|
16
|
+
RCT_EXTERN_METHOD(setAppLanguage:(NSString *)language
|
|
17
|
+
resolver:(RCTPromiseResolveBlock)resolver
|
|
18
|
+
rejecter:(RCTPromiseRejectBlock)rejecter);
|
|
16
19
|
@end
|
|
17
20
|
|
|
18
21
|
@interface RCT_EXTERN_MODULE (AnalyticsBridge, NSObject)
|
|
@@ -123,5 +126,5 @@ RCT_EXTERN_METHOD(delete:(NSString *)path
|
|
|
123
126
|
rejecter:(RCTPromiseRejectBlock)reject);
|
|
124
127
|
|
|
125
128
|
RCT_EXTERN_METHOD(getFilesDirectory:(RCTPromiseResolveBlock)resolve
|
|
126
|
-
|
|
129
|
+
rejecter:(RCTPromiseRejectBlock)reject);
|
|
127
130
|
@end
|
|
@@ -10,6 +10,13 @@ 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
|
+
|
|
13
20
|
@objc(LocalStorage)
|
|
14
21
|
class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
15
22
|
var bridge: RCTBridge!
|
|
@@ -22,18 +29,6 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
22
29
|
return true
|
|
23
30
|
}
|
|
24
31
|
|
|
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
|
-
|
|
37
32
|
// MARK: RC extern methods
|
|
38
33
|
|
|
39
34
|
/// Store a stringified object in LocalStorage
|
|
@@ -47,19 +42,21 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
47
42
|
@objc public func setItem(_ key: String?, value: String?, namespace: String?,
|
|
48
43
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
49
44
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
45
|
+
DispatchQueue.main.async {
|
|
46
|
+
guard let key = key,
|
|
47
|
+
let value = value,
|
|
48
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
49
|
+
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageSet, nil)
|
|
50
|
+
return
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if storage.localStorageSetValue(for: key,
|
|
54
|
+
value: value,
|
|
55
|
+
namespace: namespace) == true {
|
|
56
|
+
resolver(true)
|
|
57
|
+
} else {
|
|
58
|
+
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageSet, nil)
|
|
59
|
+
}
|
|
63
60
|
}
|
|
64
61
|
}
|
|
65
62
|
|
|
@@ -74,14 +71,16 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
74
71
|
namespace: String?,
|
|
75
72
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
76
73
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
DispatchQueue.main.async {
|
|
75
|
+
guard let key = key,
|
|
76
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
77
|
+
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageGet, nil)
|
|
78
|
+
return
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
let retVal = storage.localStorageValue(for: key, namespace: namespace)
|
|
82
|
+
resolver(retVal)
|
|
81
83
|
}
|
|
82
|
-
|
|
83
|
-
let retVal = storage.localStorageValue(for: key, namespace: namespace)
|
|
84
|
-
resolver(retVal)
|
|
85
84
|
}
|
|
86
85
|
|
|
87
86
|
/// Remove previously saved session value by key
|
|
@@ -95,15 +94,17 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
95
94
|
namespace: String?,
|
|
96
95
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
97
96
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
97
|
+
DispatchQueue.main.async {
|
|
98
|
+
guard let key = key,
|
|
99
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
100
|
+
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageRemove, nil)
|
|
101
|
+
return
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
let retVal = storage.localStorageRemoveValue(for: key,
|
|
105
|
+
namespace: namespace)
|
|
106
|
+
resolver(retVal)
|
|
102
107
|
}
|
|
103
|
-
|
|
104
|
-
let retVal = storage.localStorageRemoveValue(for: key,
|
|
105
|
-
namespace: namespace)
|
|
106
|
-
resolver(retVal)
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
/// Get ALL previously saved session values
|
|
@@ -115,13 +116,15 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
115
116
|
@objc public func getAllItems(_ namespace: String?,
|
|
116
117
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
117
118
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
DispatchQueue.main.async {
|
|
120
|
+
guard let storage = FacadeConnector.connector?.storage else {
|
|
121
|
+
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageGet, nil)
|
|
122
|
+
return
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
let retVal = storage.localStorageAllValues(namespace: namespace)
|
|
126
|
+
resolver(retVal)
|
|
121
127
|
}
|
|
122
|
-
|
|
123
|
-
let retVal = storage.localStorageAllValues(namespace: namespace)
|
|
124
|
-
resolver(retVal)
|
|
125
128
|
}
|
|
126
129
|
|
|
127
130
|
/// Store a stringified object in Keychain
|
|
@@ -137,19 +140,21 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
137
140
|
namespace: String?,
|
|
138
141
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
139
142
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
143
|
+
DispatchQueue.main.async {
|
|
144
|
+
guard let key = key,
|
|
145
|
+
let value = value,
|
|
146
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
147
|
+
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageSet, nil)
|
|
148
|
+
return
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if storage.keychainStorageSetValue(for: key,
|
|
152
|
+
value: value,
|
|
153
|
+
namespace: namespace) == true {
|
|
154
|
+
resolver(true)
|
|
155
|
+
} else {
|
|
156
|
+
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageSet, nil)
|
|
157
|
+
}
|
|
153
158
|
}
|
|
154
159
|
}
|
|
155
160
|
|
|
@@ -164,14 +169,16 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
164
169
|
namespace: String?,
|
|
165
170
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
166
171
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
172
|
+
DispatchQueue.main.async {
|
|
173
|
+
guard let key = key,
|
|
174
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
175
|
+
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageGet, nil)
|
|
176
|
+
return
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
let retVal = storage.keychainStorageValue(for: key, namespace: namespace)
|
|
180
|
+
resolver(retVal)
|
|
171
181
|
}
|
|
172
|
-
|
|
173
|
-
let retVal = storage.keychainStorageValue(for: key, namespace: namespace)
|
|
174
|
-
resolver(retVal)
|
|
175
182
|
}
|
|
176
183
|
|
|
177
184
|
/// Remove previously saved Keychain value by key
|
|
@@ -185,14 +192,16 @@ class LocalStorageBridge: NSObject, RCTBridgeModule {
|
|
|
185
192
|
namespace: String?,
|
|
186
193
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
187
194
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
195
|
+
DispatchQueue.main.async {
|
|
196
|
+
guard let key = key,
|
|
197
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
198
|
+
rejecter(LocalErrorCallBack.errorCode, LocalErrorCallBack.errorMessageRemove, nil)
|
|
199
|
+
return
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
let retVal = storage.keychainStorageRemoveValue(for: key,
|
|
203
|
+
namespace: namespace)
|
|
204
|
+
resolver(retVal)
|
|
192
205
|
}
|
|
193
|
-
|
|
194
|
-
let retVal = storage.keychainStorageRemoveValue(for: key,
|
|
195
|
-
namespace: namespace)
|
|
196
|
-
resolver(retVal)
|
|
197
206
|
}
|
|
198
207
|
}
|
|
@@ -10,6 +10,13 @@ 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
|
+
|
|
13
20
|
@objc(SessionStorage)
|
|
14
21
|
class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
15
22
|
var bridge: RCTBridge!
|
|
@@ -22,18 +29,6 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
22
29
|
return true
|
|
23
30
|
}
|
|
24
31
|
|
|
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
|
-
|
|
37
32
|
// MARK: RC extern methods
|
|
38
33
|
|
|
39
34
|
/// Store a stringified object in SessionStorage
|
|
@@ -47,19 +42,21 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
47
42
|
@objc public func setItem(_ key: String?, value: String?, namespace: String?,
|
|
48
43
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
49
44
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
DispatchQueue.main.async {
|
|
46
|
+
guard let key = key,
|
|
47
|
+
let value = value,
|
|
48
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
49
|
+
rejecter(StorageErrorCallback.errorCode, StorageErrorCallback.errorMessageSet, nil)
|
|
50
|
+
return
|
|
51
|
+
}
|
|
56
52
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
if storage.sessionStorageSetValue(for: key,
|
|
54
|
+
value: value,
|
|
55
|
+
namespace: namespace) == true {
|
|
56
|
+
resolver(true)
|
|
57
|
+
} else {
|
|
58
|
+
rejecter(StorageErrorCallback.errorCode, StorageErrorCallback.errorMessageSet, nil)
|
|
59
|
+
}
|
|
63
60
|
}
|
|
64
61
|
}
|
|
65
62
|
|
|
@@ -73,15 +70,16 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
73
70
|
@objc public func getItem(_ key: String?, namespace: String?,
|
|
74
71
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
75
72
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
73
|
+
DispatchQueue.main.async {
|
|
74
|
+
guard let key = key,
|
|
75
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
76
|
+
rejecter(StorageErrorCallback.errorCode, StorageErrorCallback.errorMessageGet, nil)
|
|
77
|
+
return
|
|
78
|
+
}
|
|
81
79
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
let retVal = storage.sessionStorageValue(for: key, namespace: namespace)
|
|
81
|
+
resolver(retVal)
|
|
82
|
+
}
|
|
85
83
|
}
|
|
86
84
|
|
|
87
85
|
/// Remove previously saved session value by key
|
|
@@ -95,15 +93,17 @@ class SessionStorageBridge: NSObject, RCTBridgeModule {
|
|
|
95
93
|
namespace: String?,
|
|
96
94
|
resolver: @escaping RCTPromiseResolveBlock,
|
|
97
95
|
rejecter: @escaping RCTPromiseRejectBlock) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
96
|
+
DispatchQueue.main.async {
|
|
97
|
+
guard let key = key,
|
|
98
|
+
let storage = FacadeConnector.connector?.storage else {
|
|
99
|
+
rejecter(LocalErrorCallBack.errorCode, StorageErrorCallback.errorMessageRemove, nil)
|
|
100
|
+
return
|
|
101
|
+
}
|
|
103
102
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
103
|
+
let retVal = storage.sessionStorageRemoveValue(for: key,
|
|
104
|
+
namespace: namespace)
|
|
105
|
+
resolver(retVal)
|
|
106
|
+
}
|
|
107
107
|
}
|
|
108
108
|
|
|
109
109
|
/// Get ALL previously saved session values
|
|
@@ -115,11 +115,13 @@ 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
|
-
|
|
118
|
+
DispatchQueue.main.async {
|
|
119
|
+
guard let storage = FacadeConnector.connector?.storage else {
|
|
120
|
+
rejecter(StorageErrorCallback.errorCode, StorageErrorCallback.errorMessageGet, nil)
|
|
121
|
+
return
|
|
122
|
+
}
|
|
123
|
+
let retVal = storage.sessionStorageAllValues(namespace: namespace)
|
|
124
|
+
resolver(retVal)
|
|
121
125
|
}
|
|
122
|
-
let retVal = storage.sessionStorageAllValues(namespace: namespace)
|
|
123
|
-
resolver(retVal)
|
|
124
126
|
}
|
|
125
127
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/quick-brick-native-apple",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.15.0-alpha.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"
|