ankitthakur / CoreDataPreference

Using core data as UserDefault settings with encryption (EncryptedCoreData)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CoreDataPreference

Using core data as UserDefault settings with encryption (EncryptedCoreData)

Build Status GitHub license Coverage Status

Dependencies: 'EncryptedCoreData' for securing db. 'SwiftyBeaver' for logging purpose

Installation

In Project pod file, add above 2 dependencies:


  # Pods for CoreDataDefaults
  pod 'EncryptedCoreData', :git => 'https://github.com/project-imas/encrypted-core-data', :commit => 'b97ffaf2f19dad4d1558bc9b0668cc2e09d17347'
  pod 'SwiftyBeaver'
  

Then add CoreDataDefaults.framework as Embedded framework in Main project Embedded framework

Code Coverage

Code Coverage

Test Report

Code Coverage

Code Sample

do {
    try CoreDataPref.set(value: Float(2.0), forKey: "floatValue")
    try CoreDataPref.set(value: 2, forKey: "IntValue")
    try CoreDataPref.set(value: ["key1": "value1", "key2": "value2"], forKey: "dictionary")
    try CoreDataPref.set(value: ["value1", "value2"], forKey: "array")
    try CoreDataPref.set(value: true, forKey: "bool")
        
    let floatValue = try CoreDataPref.float(forKey: "floatValue")
    let intValue = try CoreDataPref.integer(forKey: "IntValue")
    let dictionary = try CoreDataPref.dictionary(forKey: "dictionary")
    let array = try CoreDataPref.array(forKey: "array")
    let boolValue = try CoreDataPref.boolean(forKey: "bool")
    
    // to remove any value
    try CoreDataDefaults.remove(valueForKey: "arrayValue")        

} catch let error {
    print(error)
}

If we want to save any class or struct, just make them Codable, and store it like below

struct Struct1: Codable {
    let value1 = "value1"
    let value2 = "value2"
    let value3 = "value3"
}
struct Struct2: Codable {
    let value1 = "value1"
    let value2 = "value2"
    let struct1Val = Struct1()
}

    do {
        // save struct in preferences
        try CoreDataPref.set(value: Struct2(), forKey: "struct")
        
        // fetch struct from preferences
        let struct = try CoreDataPref.codable(objectType: Struct2.self, forKey: "struct")
        
    } catch let error {
        print(error)
    }

Here is the Swift Lint Report:

$ swiftlint
Loading configuration from '.swiftlint.yml'
Linting Swift files at paths
Linting 'ManagedObectExtension.swift' (1/9)
Linting 'Logger.swift' (2/9)
Linting 'CoreDataManager.swift' (3/9)
Linting 'Obfuscator.swift' (4/9)
Linting 'CoreDataDefaultsCollection.swift' (5/9)
Linting 'CDDefault+CoreDataClass.swift' (6/9)
Linting 'CDDefault+CoreDataProperties.swift' (7/9)
Linting 'CoreDataDefaults.swift' (8/9)
Linting 'CoreDataDefaultsTests.swift' (9/9)
Done linting! Found 0 violations, 0 serious in 9 files.

Contributors To Build the framework and for generating these reports, execute below commands:

#Build the project
xcodebuild clean build -workspace ./CoreDataDefaults.xcworkspace -scheme CoreDataDefaults -sdk iphonesimulator12.1

# Run Test Cases
xcodebuild test -workspace CoreDataDefaults.xcworkspace -scheme CoreDataDefaults  -sdk iphonesimulator12.1 -destination 'platform=iOS Simulator,name=iPhone XR' -resultBundlePath TestResults

# Generating TestResults html report
xchtmlreport -r TestResults

# Generating Code coverage report:
xcov -w CoreDataDefaults.xcworkspace -s CoreDataDefaults -o xcov_output --markdown_report

About

Using core data as UserDefault settings with encryption (EncryptedCoreData)

License:MIT License


Languages

Language:HTML 97.8%Language:Swift 1.4%Language:C 0.3%Language:CSS 0.3%Language:Ruby 0.1%Language:Objective-C 0.1%Language:JavaScript 0.0%