测试已测试 | ✗ |
语言语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2018年1月 |
SwiftSwift版本 | 3.1 |
Meng Li维护。[Meng Li].
依赖 | |
同步 | ~> 4 |
AFNetworking | ~> 3 |
一个用于开发使用密钥共享和多台不可信服务器应用的框架。
传统的客户端-服务器模式应用程序需要中央服务器来存储共享数据。此类移动应用的用户必须完全信任中央服务器和其应用提供商。如果中央服务器被黑客攻破,用户信息可能会被泄露,因为数据通常以明文形式存储在服务器上。当服务提供商关闭其服务时,用户可能会丢失其数据。
Grouper使用密钥共享和多台不可信服务器来解决这个问题。在Grouper中,一个设备使用密钥共享方案将一条消息分成多个份额,并将它们上传到多个不可信服务器。其他设备通过密钥共享方案下载数据并恢复份额以转换为原始消息。因此,用户数据可以得到保护。
我们使用Grouper框架开发了一个名为AccountBook的演示应用程序。
Grouper可以通过CocoaPods获取。要安装它,只需将以下行添加到Podfile中:
文档
pod 'Grouper', '~> 2.1'
Grouper是用Objective-C开发的。将头文件导入到项目中。
#import <Grouper/Grouper.h>
Grouper对象包括3个子对象,它们是group(GroupManager)、sender(SenderManager)、receiver(ReceiverManager)。
Grouper依赖于Sync框架以在设备之间同步数据。因此,当您在AppDelegate中设置Core Data堆栈时,您应该使用Sync框架中提供的DataStack。
_dataStack = [[DataStack alloc] initWithModelName:@"Model"];
接下来,使用您的appId、实体、数据堆栈和主Storyboard设置Grouper。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
grouper = [Grouper sharedInstance];
[grouper setupWithAppId:@"test-app"
entities:[NSArray arrayWithObjects:@"Test", nil]
dataStack:[self dataStack]
mainStoryboard:storyboard];
}
属性实体是一个数组,包含所有保存在Core Data中的实体的名称。
如果一个实体A被另一个实体B引用,您需要确保在实体数组中A应在B之前。
您所有的Core Data实体应该是SyncEntity的子实体,且所有您的NSManagedObject应该是SyncEntity的子类。SyncEntity类已经由Grouper框架提供。在您的Model.xcdatamodeld文件中创建SyncEntity,并将您的实体的父实体设置为SyncEntity。
属性 | 类型 | 说明 |
---|---|---|
createAt | 日期 | 此实体的创建日期 |
creator | 字符串 | 此实体的创建者 |
remoteID | 字符串 | 用于同步框架的远程ID |
updator | 字符串 | 此实体的更新者 |
更新时间 | 字符串 | 此实体的更新日期 |
Grouper在Init.storyboard中提供分组初始化相关功能,在Members.storyboard中提供成员管理。可以通过grouper.ui.groupInit
和grouper.ui.members
直接使用这两个storyboard。
Grouper使用SenderManager发送数据,使用ReceiverManager接收数据。
通过grouper.sender类使用这些方法发送数据。
// Send an update message for a sync entity.
- (void)update:(NSManagedObject *)entity;
// Delete a sync entity and send a delete message.
- (void)delete:(NSManagedObject *)entity;
// Send update messages for multiple sync entities.
- (void)updateAll:(NSArray *)entities;
// Delete multiple sync entities and send delete messages.
- (void)deleteAll:(NSArray *)entities;
// Send confirm message;
- (void)confirm;
// Send resend message which contains not existed sequences to receiver.
- (void)resend:(NSArray *)sequences to:(NSString *)receiver;
通过grouper.receiver类使用此方法接收数据。
// Receive message and do something in completion block.
- (void)receiveWithCompletion:(Completion)completion;
更多信息可以在演示应用
李明,http://fczm.pw,[email protected]
Grouper遵循MIT许可协议。有关更多信息,请参阅LICENSE文件。