无法通过iOS共享扩展程序共享文件

时间:2017-03-29 18:15:32

标签: ios ios-extensions

我从声称通过共享扩展分享照片应用中的照片的客户收到了以下日志。客户假设与路由器的互联网连接不好。客户描述的行为如下:

  1. 通过错误连接通过共享扩展程序上传文件
  2. 让设备休眠,在我们的情况下,连接应该终止,文件不会上传到我们的服务器。
  3. 尝试重新上传相同的文件。
  4. 预期成果: 该文件应该正常上传。

    实际结果: 共享扩展程序永远不会加载,这意味着用户可以无限地单击应用程序图标而无法显示视图。

    除此之外,我们还没有能够在内部重现这样的问题。但是,客户每次在机场都可以这样做。

    我看了他的设备日志,我可以看到以下内容,但不知道发生了什么。从出界的异常开始,由于视图从未加载,我无法解释

    任何想法或其他人是否遇到同样的问题?

      

    Apr 13 15:11:07 audi pkd [153]:分配插件   (2.1.2)插件沙箱

         

    Apr 13 15:11:07 audi pkd [153]:为插件启用pid = 386   (2.1.2)   D89CEF37-B025-4C6F-A8B6-FBB6B4D94A84 /私有的/ var /容器/捆绑/应用/ AF69E215-04AE-4929-A8C8-51BE8FADF397 /。应用程序/插件/ .appex

         

    Apr 13 15:11:07 audi kernel [0]:xpcproxy [451]容器:   /私有的/ var /移动/容器/数据/ PluginKitPlugin / 669C0F52-1C21-441D-9906-E2EFBD8A7D00(沙箱)

         

    Apr 13 15:11:08 audi kernel [0]:   LwVM :: _ generateMappedExtentsList - 无法将unmap范围映射到分区

         

    Apr 13 15:11:08 audi backboardd [60]:无法   名为.gsEvents的bootstrap_look_up端口:   未知错误代码(1102)Apr 13 15:11:08 audi [451]:    *由于未捕获的异常终止应用' NSRangeException',原因:' * - [__ NSArrayI objectAtIndex:]:索引1超出边界[0 ..   0]'第一次抛出调用堆栈:(0x18400ae38 0x18366ff80 0x183eeb158   0x1000e4a40 0x1000e4738 0x183a554bc 0x183a5547c 0x183a5ab84   0x183fc0dd8 0x183fbec40 0x183ee8d10 0x1857d0088 0x1891bdf70   0x183cacd74 0x183caea2c 0x184acbd30 0x18b2e2c48 0x18b2e28dc   0x18b2e2c6c 0x1848de058 0x183a868b8)

         

    Apr 13 15:11:08 audi MobileSlideShow [386]:插件    中断

         

    Apr 13 15:11:08 audi MobileSlideShow [386]:插件    无效

         

    Apr 13 15:11:08 audi diagnosticd [84]:错误评估过程   info - pid:451,puniqueid:451

         

    Apr 13 15:11:08 audi mediaserverd [28]:''   (pid = 451)设置DiscoveryMode =   DiscoveryMode_None,currentDiscoveryMode = DiscoveryMode_None

         

    Apr 13 15:11:08 audi MobileSlideShow [386]:2016-04-13   15:11:08.629 | MobileSlideShow | 0x14ce07cd0:HOST:无法加载远程   视图控制器有错误:错误域= NSCocoaErrorDomain代码= 4099   "名为的服务连接   .viewservice被打断了,但是   消息是通过其他代理发送的,因此该代理具有   变得无效。" UserInfo = {NSDebugDescription =与...的连接   名为.viewservice的服务被中断,   但是消息是通过另一个代理发送的,因此这个   代理已失效。}

         

    Apr 13 15:11:08 audi MobileSlideShow [386]:2016-04-13   15:11:08.633 | MobileSlideShow | 0x14ce07cd0:未显示工作表,   呼叫过早完成

         

    Apr 13 15:11:08 audi com.apple.xpc.launchd [1]   ([451]):服务退出原因   信号:中止陷阱:6

         

    Apr 13 15:11:08 audi ReportCrash [452]:制定报告   尸体[451]

         

    Apr 13 15:11:08 audi ReportCrash [452]:类型报告   ' 109(109 _)'没有保存,因为已经有25个日志的限制   达到

         

    Apr 13 15:11:08 audi ReportCrash [452]:注意:此报告是   缩写为syslog包含因为无法保存到   磁盘。

         

    可以通过手动清理和包括来进行符号化   来自同一设备的完整报告的二进制图像部分 - 很好   运气!

         

    Apr 13 15:11:08 audi ReportCrash [452]:流程:   [451]路径:   /private/var/containers/Bundle/Application/AF69E215-04AE-4929-A8C8-51BE8FADF397/.app/PlugIns/.appex /

1 个答案:

答案 0 :(得分:0)

在很多情况下,文件很大,并且连接在完成之前被释放,或者处于同一叶片中,如果该叶片中存在某种东西(一种可能的解决方法),请首先将文件写入应用程序文档文件夹,然后通过URL链接从应用程序中的文档文件夹上传,例如:(带有图片的示例)

let documentsDirectoryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let path = documentsDirectoryPath.appending("/outImage.jpg")
let outURL = URL(fileURLWithPath: path)

try? FileManager.default.removeItem(at: outURL)

        if let data2c = self.newImage.jpegData(compressionQuality:1.0)
        {
            do
            {
                try data2c.write(to: outURL)

                DispatchQueue.main.async
                {
                    var filesToShare = [Any]()
                    filesToShare.append(outURL)

                    let activityVC = UIActivityViewController(activityItems: filesToShare, applicationActivities: nil)
                    activityVC.excludedActivityTypes = [.print,.assignToContact,.copyToPasteboard,.addToReadingList,.markupAsPDF,.postToTencentWeibo,.postToTencentWeibo]
                    activityVC.popoverPresentationController?.sourceView = self.view
                    activityVC.preferredContentSize = CGSize(width: self.view.frame.size.width, height: self.view.frame.size.height-60)
                    activityVC.modalPresentationCapturesStatusBarAppearance = true

                    self.present(activityVC, animated: true, completion: nil)
                }

            } catch {
  print("Couldn't write file")
            }
        }