iOS - 通过共享扩展在应用程序之间移动项目

iOS - Move item between applications, via share extension

有 2 个应用程序:

  1. WhatsApp 应用程序
  2. 我的应用(testAPP)

我尝试在 WhatsApp 之间共享一个音频文件到我的应用程序 (testAPP),我已经实现了应用程序组和共享扩展。

我成功地集成了这些应用程序并收到了 url,如下所示:

文件:///private/var/mobile/Containers/Data/Application/xxxxxx/tmp/documents/xxxxxx/2017-04-16-AUDIO-00001077.opus

例如,当我尝试将此文件移动到我的本地文档应用程序时,问题就开始了

目标路径: startingPath = /private/var/mobile/Containers/Data/Application/xxxxxx/tmp/documents/xxxxxx/2017-04-16-AUDIO-00001077.opus

目标路径: endingPath = /var/mobile/Containers/Data/Application/685A0D6F-AB7C-4DCF-ADD9-19AAE6A8DAFD/Documents

    do {
        try filemgr.moveItem(atPath: startingPath, toPath: endingPath!)
    } catch let error as NSError {
        NSLog("Unable to create directory \(error.debugDescription)")
    }

我收到此错误,但我不明白为什么

无法创建目录 Error Domain=NSCocoaErrorDomain Code=516 ““2017-04-16-AUDIO-00001077.opus”无法移动到“xxxx”,因为已存在同名项目” UserInfo={NSSourceFilePathErrorKey=/private/var/mobile/Containers/Data/Application/xxxxx/tmp/documents/xxxxxxx/2017-04-16-AUDIO-00001077.opus, NSUserStringVariant=( 移动 ), NSDestinationFilePath=/var/mobile/Containers/Data/Application/6xxxx/Documents, NSFilePath=/private/var/mobile/Containers/Data/Application/xxxxx/tmp/documents/xxxxxx2/2017-04-16-AUDIO-00001077.opus, NSUnderlyingError=0x17005f6b0 {Error Domain=NSPOSIXErrorDomain Code=17 "File exists"}}

终于明白问题所在了

当应用程序使用共享扩展来共享 file/image... 到您的应用程序内部时,文件存在于此位置:

/private/var/mobile/Containers/Data/Application/

为了获得文件的完整权限,需要将文件复制到应用组共享文件夹:

/private/var/mobile/Containers/Shared/AppGroup/

将文件移动到应用组共享文件夹后,您将获得对该文件的完全权限