无法使用实际设备上的共享扩展使用NSURLSession

问题描述:

我正在构建一个共享扩展,需要下载一些JSON作为响应。我完全不知道为什么这不起作用,我试着按摩它的许多小部分,但仍然没有。在模拟器上,这工作正常。无法使用实际设备上的共享扩展使用NSURLSession

下面是我得到了什么:

- (void)didSelectPost 
{ 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 

    // ... set up the request 

    NSString *const kFLHTTPMethodPOST = @"POST"; 
    [request setHTTPMethod:kFLHTTPMethodPOST]; 

    NSString *sessionConfigurationIdentifier = [[NSBundle mainBundle] bundleIdentifier]; 

    self.sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:sessionConfigurationIdentifier]; 
    // The sharedContainerIdentifier must be populated for background sessions 
    // https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1 
    // http://cl.ly/image/0Y3P1B450U1Y 
    self.sessionConfiguration.sharedContainerIdentifier = kFLAppGroupIdentifier; 
    // The delegate must be populated for background sessions 
    // https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html#//apple_ref/doc/uid/TP40013509-SW44 
    // http://cl.ly/image/431J0G2r2p0X 
    self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:nil]; 

    // Generate our task and start it 

    // Use of a download task is required for extensions even though a data task might be more apt here 
    // https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html#//apple_ref/doc/uid/TP40013509-SW44 
    self.task = [self.session downloadTaskWithRequest:request]; 
    [self.task resume]; 

    // Finish the extension 

    [self.extensionContext completeRequestReturningItems:nil completionHandler:nil]; 
} 

这不是从示例代码在https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW2和很多我在其他地方看到的代码非常不同。主应用程序和扩展程序都具有我所知的适当权利和配置。看起来应用程序组正在工作,因为扩展能够存储文件并从与主应用程序共享的NSUserDefaults副本中提取值。

有没有人能得到这个工作正常?好像我必须错过一些东西。

UPDATE:

被挖掘到这进一步。

我看到这个记录的分机结束后。

Aug 28 12:03:41 Tim-Johnsens-iPod nsurlsessiond [98]:无法在file:/// private/var/mobile/Containers/Shared/AppGroup/4C86E3B4-6795-4D8A- 9C47-11B88A252703 /图书馆/缓存/ com.apple.nsurlsessiond /下载/ com.flipboard.flipboard-IPAD调试/,错误:错误域= NSCocoaErrorDomain代码= 513“的操作无法完成(可可错误513。 )”的UserInfo = 0x14ea3460 {NSFilePath = /私有的/ var /移动/容器/共享/ AppGroup/4C86E3B4-6795-4D8A-9C47-11B88A252703 /库/缓存/ com.apple.nsurlsessiond /下载/ com.flipboard.flipboard-ipad的-debug,NSUnderlyingError = 0x14e7f320“无法完成操作,不允许操作”}

奇怪的是我已经将文件存储在file:/// private/var/mobile/Containers/Sh ared/AppGroup/4C86E3B4-6795-4D8A-9C47-11B88A252703 /成功,出于某种原因NSURLSession似乎无法将文件放在那里。

我添加了一行手动创建在我的分机的-viewDidLoad这个目录和错误而停止,但现在我得到不同的错误。它看起来像是一个临时文件正在创建,但在iOS创建一个无效的URL的地方,然后我的-URLSession:任务:didCompleteWithError:在会话连续两次调用。 (注:以“~~”开头的行是我加的)。 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0创建临时文件:/ private/var/mobile/Containers/Shared/AppGroup/4C86E3B4-6795-4D8A-9C47- 11B88A252703 /库/缓存/ com.apple.nsurlsessiond /下载/ com.flipboard.flipboard-ipad的调试/ CFNetworkDownload_BUqFkv.tmp 08月28 13点33分34秒TIM-Johnsens-的iPod nsurlsessiond [98]:从PID 502连接:警告:在调用收到的消息期间捕获异常,丢弃传入的消息并使连接无效。 例外:* - [NSURL initFileURLWithPath:]:零字符串参数 Aug 28 13:33:34 Tim-Johnsens-iPod ShareExtension [502]:~~ - [FLShareExtensionViewController URLSession:task:didCompleteWithError:] - Error Domain = NSURLErrorDomain Code = -1“未知错误”UserInfo = 0x176d19d0 {NSErrorFailingURLKey = [已编辑],NSErrorFailingURLStringKey = [已编辑],NSLocalizedDescription =未知错误} Aug 28 13:33:34 Tim-Johnsens-iPod ShareExtension [502]:~~ - [FLShareExtensionViewController URLSession:任务:didCompleteWithError:] - 错误域= NSURLErrorDomain代码= -997 “丢失连接到后台传输服务” 的UserInfo = 0x1765fb80 {NSErrorFailingURLKey = [删除],NSErrorFailingURLStringKey = [删除],NSLocalizedDescription =失去连接到后台传输服务}

我猜我的扩展正在获取与“丢失的连接到后台传输服务”错误的回调,因为背景传输服务因抛出异常而崩溃。

+0

在开发论坛上也问过这个问题,并为它开了一个雷达。 https://devforums.apple.com/message/1031240#1031240 – 2014-08-28 17:54:28

+0

当构建一个基本的示例应用程序时,我得到了相同的结果。 – 2014-08-28 17:54:50

+0

还有更多的事情,当我使用GET请求而不是POST时,我得到了相同的结果(请求永远不会发送)。苹果说你可以使用POST请求下载任务。 – 2014-08-28 18:56:03

原来,这在iOS 8 GM中已修复,它只是beta版本中的一个bug。