EncryptedDATAStack 7.0.3

EncryptedDATAStack 7.0.3

测试已测试
语言语言 SwiftSwift
许可协议 MIT
发布最新发布2017年8月
SwiftSwift版本3.0
SPM支持SPM

RodrigoRodrigo Copetti维护。



EncryptedDATAStack

仅用一行代码设置加密数据库!

EncryptedDATAStack 是基于 DATAStack 的分支,增加了对 Encrypted Core Data (Core Data + SQLCipher) 的支持,并增加了对iOS 8的额外支持。总而言之,这使得您只需一行代码即可设置数据库(加密或未加密)!

版本标签设置为匹配使用的DATAStack版本。

目录

运行示例

在能够运行示例之前,您必须使用CocoaPods安装示例依赖项。

  • 安装CocoaPods
  • 输入pod install
  • 运行示例工作区

初始化

您可以使用您的Core Data模型名称(xc-datamodel)轻松初始化新的EncryptedDATAStack实例。

Swift

let encryptedDataStack = EncryptedDATAStack(passphraseKey:"YOUR_PASSWORD", modelName:"MyAppModel")

Objective-C

EncryptedDATAStack *encryptedDataStack = [[EncryptedDATAStack alloc] initWithPassphraseKey:@"YOUR_PASSWORD" modelName:@"MyAppModel"];

还有许多其他初始化EncryptedDATAStack的方法。

  • 使用自定义存储类型。
//For Memory Storage
let encryptedDataStack = EncryptedDATAStack(modelName:"MyAppModel", storeType: .InMemory)
//For Regular SQLite
let encryptedDataStack = EncryptedDATAStack(modelName:"MyAppModel", storeType: .sqLiteNoEncryption)
  • 使用另一个包和一个存储类型,比如您的测试包和.InMemory存储类型,非常适合运行单元测试。
let encryptedDataStack = EncryptedDATAStack(modelName: "Model", bundle: NSBundle(forClass: Tests.self), storeType: .InMemory)
  • 使用与您的模型名称不同的.sql文件名,例如CustomStoreName.sqlite
let encryptedDataStack = EncryptedDATAStack(passphraseKey:"YOUR_PASSWORD", modelName: "Model", bundle: NSBundle.mainBundle(), storeType: .sqLite, storeName: "CustomStoreName")
  • 提供不同的容器URL,默认情况下我们将使用文档文件夹,大多数应用都这样做,但如果您想共享您的sqlite文件在主应用和您的应用扩展之间,您将需要这个。
let encryptedDataStack = EncryptedDATAStack(passphraseKey:"YOUR_PASSWORD", modelName: "Model", bundle: NSBundle.mainBundle(), storeType: .sqLite, storeName: "CustomStoreName", containerURL: sharedURL)

主线程NSManagedObjectContext

要访问主线程关联的NSManagedObjectContext,只需使用mainContext属性即可。

self.encryptedDataStack.mainContext

self.encryptedDataStack.viewContext

后台线程NSManagedObjectContext

您可以轻松创建一个新的NSManagedObjectContext用于数据处理。此代码块完全异步,将在后台线程上运行。

为了与NSPersistentContainer兼容,您也可以使用performBackgroundTask而不是performInNewBackgroundContext

Swift

func createUser() {
self.encryptedDataStack.performInNewBackgroundContext { backgroundContext in
let entity = NSEntityDescription.entityForName("User", inManagedObjectContext: backgroundContext)!
let object = NSManagedObject(entity: entity, insertIntoManagedObjectContext: backgroundContext)
object.setValue("Background", forKey: "name")
object.setValue(NSDate(), forKey: "createdDate")
try! backgroundContext.save()
}
}

Objective-C

- (void)createUser {
[self.encryptedDataStack performInNewBackgroundContext:^(NSManagedObjectContext * _Nonnull backgroundContext) {
NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:backgroundContext];
NSManagedObject *object = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:backgroundContext];
[object setValue:@"Background" forKey:@"name"];
[object setValue:[NSDate date] forKey:@"createdDate"];
[backgroundContext save:nil];
}];
}

在使用Xcode的Objective-C自动完成功能时,backgroundContext参数名称不会被包含。请确保添加它。

清理

删除.sqlite文件并重置您的EncryptedDATAStack状态,只需调用drop即可。

Swift

self.encryptedDataStack.drop()

Objective-C

[self.encryptedDataStack forceDrop];

测试

EncryptedDATAStack针对单元测试进行了优化,并在测试环境中同步运行。希望您现在需要使用更少的XCTestExpectations。

如果您的Core Data模型位于应用捆绑包中,您可以创建一个使用内存存储的堆栈,如下所示:

Swift

let encryptedDataStack = EncryptedDATAStack(modelName: "MyAppModel", bundle: NSBundle.mainBundle(), storeType: .InMemory)

Objective-C

EncryptedDATAStack *encryptedDataStack = [[EncryptedDATAStack alloc] initWithModelName:@"MyAppModel"
bundle:[NSBundle mainBundle]
storeType:EncryptedDATAStackStoreTypeInMemory];

如果您的Core Data模型位于测试捆绑包中:

Swift

let encryptedDataStack = EncryptedDATAStack(modelName: "MyAppModel", bundle: NSBundle(forClass: Tests.self), storeType: .InMemory)

Objective-C

EncryptedDATAStack *encryptedDataStack = [[EncryptedDATAStack alloc] initWithModelName:@"MyAppModel"
bundle:[NSBundle bundleForClass:[self class]]
storeType:EncryptedDATAStackStoreTypeInMemory];

迁移

如果EncryptedDATAStack因为迁移处理不当或密码短语不正确而难以创建持久化协调器,它将销毁您数据并创建一个新的sqlite文件。正常情况下Core Data的这种行为是在启动时使您的应用程序崩溃。这可不是什么好玩的事情。

安装

EncryptedDATAStack可通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中:

use_frameworks!

pod 'EncryptedDATAStack', :git => 'https://github.com/flipacholas/EncryptedDATAStack.git'

改进

您可以提交问题、Pull请求……我会很乐意帮忙。

作者

Rodrigo Copetti,@flipacholas

特别感谢:

Elvis Nuñez,@3lvis和Project iMAS,project-imas

授权

EncryptedDATAStack在Affero GPL v3许可证下提供。

……开玩笑的,对您来说,这是MIT许可证。有关更多信息,请参阅LICENSE文件。