ios 分享扩展

来源:互联网 发布:区网络信息管理中心 编辑:程序博客网 时间:2024/06/06 08:49

1, 创建分享扩展

File --- New -- Target


2, 设置分享的时候必须要指定 一个扩展规则


3,设置 APP  Group 来实现 实现应用共享 数据








读取 group 中的数据就可以使用 “group.xxxxxx”  来获取数据

NSFileManager *fileManager = [NSFileManager defaultManager];

NSURL *groupURL = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.DoubiDemo"];


简单的理解就是:  扩展 是一个中转站, 其他应用将文件地址发给    扩展 ,并将文件复制到  扩展中,我们自己的应用将从  扩展 中读取数据
我们在扩展中处理 接收到的文件路径 复制到 扩展


<span style="color:#000000;"> -(void)viewDidLoad{    [super viewDidLoad];      NSExtensionItem *extensionItem = [self.extensionContext.inputItems firstObject];        __weak __typeof(self) __weak_self = self;    BOOL isExit = YES;    for(NSItemProvider *itemProvider in [extensionItem attachments]) {        if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeFileURL]) {            isExit = NO;            [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeFileURL options:nil completionHandler:^(id<NSSecureCoding>  _Nullable item, NSError * _Null_unspecified error) {                                NSURL *URL = (NSURL *)item;                if ([URL isFileURL] && [__weak_self copyResToAppGroup:URL])                    [__weak_self openApp ];                else                    [self.extensionContext completeRequestReturningItems:nil completionHandler:NULL];            }];        }    }    if (isExit) [self.extensionContext completeRequestReturningItems:nil completionHandler:NULL];}</span>
将文件复制到 扩展

// 将文件复制到 app group<span style="color:#000000;">- (BOOL) copyResToAppGroup:(NSURL *) sorURL{    NSError *error = nil;    NSFileManager *fileManager = [NSFileManager defaultManager];    NSURL *groupURL = [fileManager containerURLForSecurityApplicationGroupIdentifier:@"group.DoubiDemo"];    groupURL = [groupURL URLByAppendingPathComponent:@"upload"];        BOOL isDir = NO;    if (![fileManager fileExistsAtPath:groupURL.relativePath isDirectory:&isDir] && !isDir)        [fileManager createDirectoryAtURL:groupURL withIntermediateDirectories:YES attributes:nil error:&error];        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];    [dateFormatter setDateFormat:@"yyyyMMddHHmmss"];    NSString *currentDateStr = [dateFormatter stringFromDate:[NSDate date]];    NSString *name = [[sorURL lastPathComponent] stringByDeletingPathExtension];    NSString *ext = [sorURL pathExtension];        groupURL = [groupURL URLByAppendingPathComponent:[NSString stringWithFormat:@"%@-%@.%@", name, currentDateStr, ext]];      return [fileManager copyItemAtURL:sorURL toURL:groupURL error:&error];}</span>

 在扩展中打开 Container app

<span style="color:#000000;">- (void)openApp {    NSString *destURLString = @"doubiDemo://";    UIResponder* responder = self;    while ((responder = [responder nextResponder]) != nil){        if([responder respondsToSelector:@selector(openURL:)] == YES){            [responder performSelector:@selector(openURL:) withObject:[NSURL URLWithString:destURLString]];            [self.extensionContext completeRequestReturningItems:nil completionHandler:NULL];        }    }}</span>

注意 :这个的@"doubiDemo://" 是container app 设置的 url Scheme









示例代码地址:git@github.com:Gaolili/ShareExtDemo.git



0 0
原创粉丝点击