iOS8扩展后台NSURLSession沙盒错误

iOS8扩展后台NSURLSession沙盒错误,ios,ios8,nsurlsession,nsurlsessionconfiguration,nsurlsessiontask,Ios,Ios8,Nsurlsession,Nsurlsessionconfiguration,Nsurlsessiontask,我正在尝试使用后台会话从照片应用程序中的共享扩展插件上载文件。由于后台NSURLSession仅支持使用uploadTaskWithRequest:WithFile:API的上载任务,因此我首先获取从扩展检索的图像URL的URL,将图像内容写入共享容器,然后上载新文件。NSURLSession似乎存在权限问题,我收到以下错误: “未能为文件颁发沙盒扩展名file:///private/var/mobile/Containers/Shared/AppGroup/..." 我知道有一些类似的帖子,但

我正在尝试使用后台会话从照片应用程序中的共享扩展插件上载文件。由于后台NSURLSession仅支持使用uploadTaskWithRequest:WithFile:API的上载任务,因此我首先获取从扩展检索的图像URL的URL,将图像内容写入共享容器,然后上载新文件。NSURLSession似乎存在权限问题,我收到以下错误:

“未能为文件颁发沙盒扩展名file:///private/var/mobile/Containers/Shared/AppGroup/..."

我知道有一些类似的帖子,但没有一篇是从扩展加载url,也没有显示将临时文件写入何处

代码如下:

- (void)fetchImageURLInExtensionContext:(NSExtensionContext*) context onComplete:(void (^)()) completion
{
    NSExtensionItem *item = self.extensionContext.inputItems[0];
    NSItemProvider *provider = item.attachments[0];
    if ([provider hasItemConformingToTypeIdentifier:@"public.jpeg"]) {
        [provider loadItemForTypeIdentifier:@"public.jpeg" options:nil completionHandler:^(id<NSSecureCoding> item, NSError *error) {
            NSObject *obj = item;
            if ([obj isKindOfClass:[NSURL class]]) {
                self.imageURL = obj;
                completion();
            }
        }];
    }
}

- (void)postImage
{
    // copy file to shared container
    NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.mytestgroup"];
    NSString *writeToPath = [[containerURL path] stringByAppendingPathComponent:@"temp.jpg"];
    BOOL success = [[NSData dataWithContentsOfURL:self.imageURL] writeToFile:writeToPath atomically:YES];

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://api.imgur.com/3/image"]];
    NSString *boundary = @"multipartboundary";
    [request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];
    request.HTTPMethod = @"POST";
    [request setValue:@"Client-ID my_imgur_client_id" forHTTPHeaderField:@"Authorization"];

    NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"blah"];
    config.sharedContainerIdentifier = @"group.com.mytestgroup";

    NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
    NSURLSessionTask *uploadTask = [session uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:writeToPath]];
    [uploadTask resume];
}
-(void)fetchImageURLInExtensionContext:(NSExtensionContext*)上下文完成:(void(^)()完成
{
NSExtensionItem*item=self.extensionContext.inputItems[0];
NSItemProvider*provider=item.attachments[0];
if([provider hasItemConformingToTypeIdentifier:@“public.jpeg”]){
[provider loadItemForTypeIdentifier:@“public.jpeg”选项:nil completionHandler:^(id项,N错误*错误){
NSObject*obj=项目;
if([obj是类的种类:[NSURL类]]){
self.imageURL=obj;
完成();
}
}];
}
}
-(无效)后期图像
{
//将文件复制到共享容器
NSURL*containerURL=[[NSFileManager defaultManager]ContainerUrlForSecurity应用程序组标识符:@“group.com.mytestgroup”];
NSString*writeToPath=[[containerURL path]stringByAppendingPathComponent:@“temp.jpg”];
BOOL success=[[NSData datawithcontentsofull:self.imageURL]writeToFile:writeToPath原子路径:YES];
NSMutableURLRequest*请求=[[NSMutableURLRequest alloc]initWithURL:[NSURL URLWithString:@]https://api.imgur.com/3/image"]];
NSString*boundary=@“multipartboundary”;
[request addValue:[NSString stringWithFormat:@“多部分/表单数据;边界=%@”,边界]用于HttpHeaderField:@“内容类型”];
request.HTTPMethod=@“POST”;
[请求设置值:@“客户ID我的客户ID”用于HttpHeaderField:@“授权”];
NSURLSessionConfiguration*config=[NSURLSessionConfiguration BackgroundSessionConfiguration WithIdentifier:@“blah”];
config.sharedContainerIdentifier=@“group.com.mytestgroup”;
NSURLSession*session=[NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
NSURLSessionTask*uploadTask=[session uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:writeToPath]];
[上传任务恢复];
}

解决方案:将文件从收件箱移动到临时目录并从那里上载。

找到解决方案了吗。请让我知道,我也被困了2天,你能分享你的想法吗solution@Joe谭:你有没有找到解决方案?解决方案:将文件从收件箱移到临时目录,然后从那里上传。@joe,你找到解决方案了吗?这违背了沙箱的目的。范围适当的NSURLSession应该可以访问共享容器。