APP/扩展( Extension )之间数据共享空间

编程入门 行业动态 更新时间:2024-09-28 09:26:40

APP/扩展( Extension )之间<a href=https://www.elefans.com/category/jswz/34/1771445.html style=数据共享空间"/>

APP/扩展( Extension )之间数据共享空间

继前面文章:ios 10开发 - 录屏直播ReplayKit Live与广播UI /上传扩展两个扩展需要使用和主Target数据共享至此

让我们开始吧

appgroup用于两个app之间共享文件,开扩了一块共同的存储区域!

此外扩展( Extension )也需要使用appgroup的相关知识

此方法只能使用于同一个开发者账号,如果不同开发者账号请考虑剪切板 UIPasteboard

1.创建APPGroup

1.登录开发者账号

点击APPGroup那栏:

右上方添加APPGroup:

然后确认就行了

2.项目中配置

打开你的xcode项目工程,先选中根目录,在target中选中你的工程–>Capabilites

3.代码中使用

1.NSUserDefaults
//初始化一个供App Groups使用的NSUserDefaults对象
NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"grouppany.appGroupName"];//写入数据
[userDefaults setValue:@"value" forKey:@"key"];//读取数据
NSLog(@"%@", [userDefaults valueForKey:@"key"]);
2.NSFileManager
//获取分组的共享目录
NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"grouppany.appGroupName"];
NSURL *fileURL = [groupURL URLByAppendingPathComponent:@"demo.txt"];//写入文件
[@"abc" writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:nil];//读取文件
NSString *str = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];
NSLog(@"str = %@", str);

利用NSFileManager我们可以存取各种文件,数据库文件(.db),json文件,framework等等;我们可以复制各种文件到APPGroup的存取区域,在另一个app中拿出来

static NSString * const group = @"grouppany.appGroupName"; - (BOOL)saveDataFromPath:(NSString *)originPath toFile:(NSString *)filename;
{self.url = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:group];NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];return [[NSFileManager defaultManager] copyItemAtPath:originPath toPath:[fileURL path] error:nil];
}

在第一块代码中,NSFileManager是以NSURL来操作的,同样,我们可以以path进行操作,这是没问题的,path可由URL的[fileURL path]方式取到

3.CoreData使用
//获取分组的共享项目
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.vimfung.ShareExtensionDemo"];
NSURL *storeURL = [containerURL URLByAppendingPathComponent:@"DataModel.sqlite"];//初始化持久化存储调度器
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"DataModel" withExtension:@"momd"];NSManagedObjectModel *model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];[coordinator addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:storeURLoptions:nilerror:nil];//创建受控对象上下文
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];[context performBlockAndWait:^{[context setPersistentStoreCoordinator:coordinator];
}];

我没有深入用过,所以这里不做详细阐述;

另外添上封装的AppGroupManager类,如需要可以使用:

AppGroupManager

#import <Foundation/Foundation.h>

@interface AppGroupManager : NSObject

@property (nonatomic, strong) NSString *identifier;  //your apple appgroup id   eg:"group.hyb.ms"

@property (nonatomic, strong) NSURL *url;  //appgroup file's url

@property (nonatomic, strong) NSUserDefaults * userDefaultes;

#pragma init

+ (instancetype)defaultManager;  //singleton method

- (instancetype)initWithGroupIdentifier:(NSString*)group;  //init

#pragma write normal data - string dic data array

- (BOOL)writeToFile:(NSString *)filename withJson:(NSString *)jsonStr;  //写入jsonStr字符串到Json文件中

- (BOOL)writeToFile:(NSString *)filename withDictionary:(NSDictionary *)dic;  //同上  只是将字典转换成字符串存入

- (BOOL)writeToFile:(NSString *)filename withData:(NSData *)data;

- (BOOL)writeToFile:(NSString *)filename withArray:(NSArray *)array;

#pragma file

- (BOOL)saveDataFromPath:(NSString *)originPath toFile:(NSString *)filename;  //copy file

- (BOOL)saveData:(NSData *)data toFile:(NSString *)filename;  //根据data类型写入对应类型的文件中

- (NSData *)dataFromFile:(NSString *)filename;  //get data (image,file...) from "(appgroup url)/filename"

- (BOOL)deleteFile:(NSString *)filename;  //delete File

#pragma read

- (NSString *)JsonFromFile:(NSString *)filename;  //read json string from file that name is filename

- (NSDictionary *)dictionaryFormFile:(NSString *)filename;  //as same as upon, just turn string to dictionary

#pragma other

- (BOOL)isExistFile:(NSString *)filename;  //judge file is exist;

#pragma - NSUserDefaults

#pragma -- save

- (BOOL)setObject:(nullable id)value forKey:(NSString *_Nullable)defaultName;

#pragma -- take out

- (nullable id)objectForKey:(NSString *_Nullable)defaultName;

#import "AppGroupManager.h"

static NSString * const mhjgroup = @"group.hyb.ms";  //默认的appgroup

@implementation AppGroupManager

#pragma mark init

static AppGroupManager *manager = nil;

+ (instancetype)defaultManager

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        manager = [[AppGroupManager alloc]initWithGroupIdentifier:mhjgroup];

        

    });

    

    return manager;

}

- (instancetype)initWithGroupIdentifier:(NSString*)group

{

    if (self = [super init]) {

        self = [[AppGroupManager alloc]init];

        self.identifier = group;

        self.url = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:group];

        self.userDefaultes = [[NSUserDefaults alloc] initWithSuiteName:group];

    }

    return self;

}

#pragma mark write normal data - string dic data array

- (BOOL)writeToFile:(NSString *)filename withJson:(NSString*)jsonStr

{

    NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];

    

    return [jsonStr writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:nil];

}

- (BOOL)writeToFile:(NSString *)filename withDictionary:(NSDictionary*)dic

{

    NSString *jsonStr = [AppGroupManager dictionaryToJson:dic];

    

    return [self writeToFile:filename withJson:jsonStr];

}

- (BOOL)writeToFile:(NSString *)filename withData:(NSData *)data

{

    NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];

    

    return [data writeToURL:fileURL atomically:YES];

}

- (BOOL)writeToFile:(NSString *)filename withArray:(NSArray *)array

{

    NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];

    

    return [array writeToURL:fileURL atomically:YES];

}

#pragma file save

- (BOOL)saveDataFromPath:(NSString *)originPath toFile:(NSString *)filename;

{

    NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];

    

    return [[NSFileManager defaultManager] copyItemAtPath:originPath toPath:[fileURL path] error:nil];

}

- (BOOL)saveData:(NSData *)data toFile:(NSString *)filename

{

    NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];

    

    return [[NSFileManager defaultManager] createFileAtPath:[fileURL path] contents:data attributes:nil];

}

- (NSData *)dataFromFile:(NSString *)filename

{

    NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];

    

    return [[NSFileManager defaultManager] contentsAtPath:[fileURL path]];

}

- (BOOL)deleteFile:(NSString *)filename;

{

    NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];

    

    return [[NSFileManager defaultManager] removeItemAtPath:[fileURL path] error:nil];

}

#pragma mark read

- (NSString*)JsonFromFile:(NSString *)filename

{

    NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];

    

    BOOL isExist = [[NSFileManager defaultManager] isExecutableFileAtPath:[fileURL path]];

    

    if (isExist) {

        

        NSString *str = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];

        

        return  str;

    }else{

        

        NSLog(@"文件不存在");

        

        return nil;

    }

}

- (NSDictionary *)dictionaryFormFile:(NSString *)filename

{

    NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];

    

    NSString *str = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:nil];

    

    if (str) {

        return [AppGroupManager dictionaryWithJsonString:str];

    }else{

        return nil;

    }

}

#pragma mark other

- (BOOL)isExistFile:(NSString *)filename;

{

    NSURL *fileURL = [self.url URLByAppendingPathComponent:filename];

    

    NSString *path = [fileURL path];

    

    BOOL isExist = [[NSFileManager defaultManager] fileExistsAtPath:path];

    

    return isExist;

}

#pragma mark private methods

+ (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {

    

    if (jsonString == nil) {

        return nil;

    }

    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];

    NSError *err;

    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData

                         

                                                        options:NSJSONReadingMutableContainers

                         

                                                          error:&err];

    if(err) {

        NSLog(@"json解析失败:%@",err);

        return nil;

    }

    return dic;

}

+ (NSString*)dictionaryToJson:(NSDictionary *)dic

{

    NSError *parseError = nil;

    

    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];

    

    return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

}

#pragma NSUserDefaults

- (BOOL)setObject:(nullable id)value forKey:(NSString *_Nullable)defaultName

{

    if (!value || !defaultName) return false;

    [self.userDefaultes setObject:value forKey:defaultName];

    return true;

}

- (nullable id)objectForKey:(NSString *_Nullable)defaultName

{

    if (!defaultName) return nil;

    return [self.userDefaultes objectForKey:defaultName];

}

@end


更多推荐

APP/扩展( Extension )之间数据共享空间

本文发布于:2024-02-28 03:08:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1768052.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据   空间   APP   Extension

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!