111 lines
3.2 KiB
Swift
111 lines
3.2 KiB
Swift
//
|
|
// AppGroupUserDefaults.swift
|
|
// digitalpilates
|
|
//
|
|
// Native module for accessing App Group UserDefaults
|
|
// Allows sharing data between main app and widget
|
|
//
|
|
|
|
import Foundation
|
|
import React
|
|
|
|
@objc(AppGroupUserDefaults)
|
|
class AppGroupUserDefaults: NSObject, RCTBridgeModule {
|
|
|
|
static func moduleName() -> String! {
|
|
return "AppGroupUserDefaults"
|
|
}
|
|
|
|
static func requiresMainQueueSetup() -> Bool {
|
|
return false
|
|
}
|
|
|
|
// MARK: - String Methods
|
|
|
|
@objc
|
|
func setString(_ groupId: String, key: String, value: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
DispatchQueue.global(qos: .background).async {
|
|
guard let userDefaults = UserDefaults(suiteName: groupId) else {
|
|
rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil)
|
|
return
|
|
}
|
|
|
|
userDefaults.set(value, forKey: key)
|
|
userDefaults.synchronize()
|
|
|
|
DispatchQueue.main.async {
|
|
resolver(nil)
|
|
}
|
|
}
|
|
}
|
|
|
|
@objc
|
|
func getString(_ groupId: String, key: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
DispatchQueue.global(qos: .background).async {
|
|
guard let userDefaults = UserDefaults(suiteName: groupId) else {
|
|
rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil)
|
|
return
|
|
}
|
|
|
|
let value = userDefaults.string(forKey: key)
|
|
|
|
DispatchQueue.main.async {
|
|
resolver(value)
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: - Number Methods
|
|
|
|
@objc
|
|
func setNumber(_ groupId: String, key: String, value: NSNumber, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
DispatchQueue.global(qos: .background).async {
|
|
guard let userDefaults = UserDefaults(suiteName: groupId) else {
|
|
rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil)
|
|
return
|
|
}
|
|
|
|
userDefaults.set(value, forKey: key)
|
|
userDefaults.synchronize()
|
|
|
|
DispatchQueue.main.async {
|
|
resolver(nil)
|
|
}
|
|
}
|
|
}
|
|
|
|
@objc
|
|
func getNumber(_ groupId: String, key: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
DispatchQueue.global(qos: .background).async {
|
|
guard let userDefaults = UserDefaults(suiteName: groupId) else {
|
|
rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil)
|
|
return
|
|
}
|
|
|
|
let value = userDefaults.object(forKey: key) as? NSNumber ?? NSNumber(value: 0)
|
|
|
|
DispatchQueue.main.async {
|
|
resolver(value)
|
|
}
|
|
}
|
|
}
|
|
|
|
// MARK: - Remove Key Method
|
|
|
|
@objc
|
|
func removeKey(_ groupId: String, key: String, resolver: @escaping RCTPromiseResolveBlock, rejecter: @escaping RCTPromiseRejectBlock) {
|
|
DispatchQueue.global(qos: .background).async {
|
|
guard let userDefaults = UserDefaults(suiteName: groupId) else {
|
|
rejecter("ERROR", "Failed to create UserDefaults with suite name: \(groupId)", nil)
|
|
return
|
|
}
|
|
|
|
userDefaults.removeObject(forKey: key)
|
|
userDefaults.synchronize()
|
|
|
|
DispatchQueue.main.async {
|
|
resolver(nil)
|
|
}
|
|
}
|
|
}
|
|
} |