Skip to content

Commit

Permalink
Add setRawObject(_:forKey)
Browse files Browse the repository at this point in the history
  • Loading branch information
vpeschenkov committed Apr 17, 2019
1 parent d6260e0 commit b754aba
Show file tree
Hide file tree
Showing 8 changed files with 49 additions and 34 deletions.
8 changes: 6 additions & 2 deletions CHANGELOG.md
Expand Up @@ -10,8 +10,12 @@

# 1.0.1
### Added:
- Swift 5 support
- Added Swift 5 support

# 1.0.2
### Fixed:
- Crash with `kCFBooleanTrue`
- Crash with `kCFBooleanTrue`

# 1.0.3
### Added
- Added `setRawObject(_:forKey)`
18 changes: 2 additions & 16 deletions Example/SecureDefaults/AppDelegate.swift
Expand Up @@ -18,30 +18,16 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// Helps to find a `.plist` file 🙂
let path = NSSearchPathForDirectoriesInDomains(
.libraryDirectory,
.userDomainMask,
true
) as [String]

// To get some security in your app just replace `NSUserDefaults` by `SecureDefaults` and set a password 😎.
let defaults = SecureDefaults()
if !defaults.isKeyCreated {
defaults.password = UUID().uuidString
}
defaults.set("Thank you for using SecureDefaults!", forKey: "secure.greeting")
defaults.set(
"""
Please, pay your attention at .plist to ensure that everything is encrypted there \(path.first!)
""",
forKey: "secure.evidence"
)
defaults.synchronize()

if let greeting = defaults.string(forKey: "secure.greeting"),
let evidence = defaults.string(forKey: "secure.evidence") {
print("\(greeting) \(evidence)")
if let greeting = defaults.string(forKey: "secure.greeting") {
print("\(greeting)")
} else {
print("Ooops... Something is definitely wrong... Let me know about this issue, please!")
}
Expand Down
19 changes: 14 additions & 5 deletions Example/Tests/Tests.swift
Expand Up @@ -3,25 +3,34 @@ import SecureDefaults

class Tests: XCTestCase {

func testEncryption() {
func testString() {
let key = "test.key.string"
let value = "Just a test message"
let defaults = SecureDefaults()
defaults.password = "test.password"
defaults.set(value, forKey: key)
defaults.synchronize()
XCTAssertTrue((defaults.rawObject(forKey: key) as? Data != nil))
XCTAssertTrue((defaults.rawObject(forKey: key) as? String == nil))
XCTAssertEqual(defaults.string(forKey: key), value)
}

func testString() {
func testRawObject() {
let key = "test.key.string"
let value = "Just a test message"
let defaults = SecureDefaults()
defaults.setRawObject(value, forKey: key)
defaults.synchronize()
XCTAssertEqual(defaults.rawObject(forKey: key) as? String, value)
}

func testEncryption() {
let key = "test.key.string"
let value = "Just a test message"
let defaults = SecureDefaults()
defaults.password = "test.password"
defaults.set(value, forKey: key)
defaults.synchronize()
XCTAssertEqual(defaults.string(forKey: key), value)
XCTAssertTrue((defaults.rawObject(forKey: key) as? Data != nil))
XCTAssertTrue((defaults.rawObject(forKey: key) as? String == nil))
}

func testStringWithWrongPassword() {
Expand Down
6 changes: 3 additions & 3 deletions README.md
Expand Up @@ -87,7 +87,7 @@ public func rawObject(forKey defaultName: String) -> Any?
it, simply add the following line to your Podfile:

```ruby
pod 'SecureDefaults', '1.0.2' # Swift 5.0
pod 'SecureDefaults', '1.0.3' # Swift 5.0
pod 'SecureDefaults', '1.0.0' # Swift 4.2
```

Expand All @@ -96,7 +96,7 @@ pod 'SecureDefaults', '1.0.0' # Swift 4.2
Add this to `Cartfile`

```ruby
github "vpeschenkov/SecureDefaults" == 1.0.2 # Swift 5.0
github "vpeschenkov/SecureDefaults" == 1.0.3 # Swift 5.0
github "vpeschenkov/SecureDefaults" == 1.0.0 # Swift 4.2
```

Expand All @@ -116,7 +116,7 @@ import PackageDescription
let package = Package(
name: "YourProject",
dependencies: [
.package(url: "https://github.com/vpeschenkov/SecureDefaults", "1.0.0")
.package(url: "https://github.com/vpeschenkov/SecureDefaults", "1.0.3")
],
targets: [
.target(name: "YourProject", dependencies: ["SecureDefaults"])
Expand Down
2 changes: 1 addition & 1 deletion SecureDefaults.podspec
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'SecureDefaults'
s.version = '1.0.2'
s.version = '1.0.3'
s.summary = 'SecureDefaults is a wrapper over UserDefaults with an extra AES256 encryption layer (key size has 256-bit length)'
s.homepage = 'https://github.com/vpeschenkov/SecureDefaults'
s.license = { :type => 'MIT', :file => 'LICENSE' }
Expand Down
4 changes: 4 additions & 0 deletions Sources/SecureDefaults/SecureDefaults.swift
Expand Up @@ -134,6 +134,10 @@ public class SecureDefaults: UserDefaults {
return super.object(forKey: defaultName)
}

public func setRawObject(_ value: Any?, forKey defaultName: String) {
super.set(value, forKey: defaultName)
}

public override func object(forKey defaultName: String) -> Any? {
return secretObject(forKey: defaultName)
}
Expand Down
24 changes: 17 additions & 7 deletions Tests/SecureDefaultsTests/SecureDefaultsTests.swift
Expand Up @@ -3,25 +3,34 @@ import XCTest

final class SecureDefaultsTests: XCTestCase {

func testEncryption() {
func testString() {
let key = "test.key.string"
let value = "Just a test message"
let defaults = SecureDefaults()
defaults.password = "test.password"
defaults.set(value, forKey: key)
defaults.synchronize()
XCTAssertTrue((defaults.rawObject(forKey: key) as? Data != nil))
XCTAssertTrue((defaults.rawObject(forKey: key) as? String == nil))
XCTAssertEqual(defaults.string(forKey: key), value)
}

func testString() {
func testRawObject() {
let key = "test.key.string"
let value = "Just a test message"
let defaults = SecureDefaults()
defaults.setRawObject(value, forKey: key)
defaults.synchronize()
XCTAssertEqual(defaults.rawObject(forKey: key) as? String, value)
}

func testEncryption() {
let key = "test.key.string"
let value = "Just a test message"
let defaults = SecureDefaults()
defaults.password = "test.password"
defaults.set(value, forKey: key)
defaults.synchronize()
XCTAssertEqual(defaults.string(forKey: key), value)
XCTAssertTrue((defaults.rawObject(forKey: key) as? Data != nil))
XCTAssertTrue((defaults.rawObject(forKey: key) as? String == nil))
}

func testStringWithWrongPassword() {
Expand Down Expand Up @@ -90,13 +99,14 @@ final class SecureDefaultsTests: XCTestCase {
}

static var allTests = [
("testEncryption", testEncryption),
("testString", testString),
("testRawObject", testRawObject),
("testEncryption", testEncryption),
("testStringWithWrongPassword", testStringWithWrongPassword),
("testURL", testURL),
("testInteger", testInteger),
("testFloat", testFloat),
("testDouble", testDouble),
("testBool", testBool),
("testBool", testBool)
]
}
2 changes: 2 additions & 0 deletions main.xcconfig
@@ -0,0 +1,2 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0
MACOSX_DEPLOYMENT_TARGET = 10.11

0 comments on commit b754aba

Please sign in to comment.