iPhone和Apple Watch无法共享应用程序组

6
我已经为这个问题苦恼了两天。我在 iPhone 应用程序中生成一个小的电影文件,希望能将其从 iPhone 发送到 Apple Watch 上播放。作为概念证明,我将类似的 .mov 文件放入 Apple Watch 应用程序的 bundle 中,并能够毫无问题地播放。因此,我认为现在当我想要向手表发送新的小片段时,只需将其放入 App Group 共享容器中,并从那里访问它,而不是从 Bundle 中访问。但事实并非如此!
我看过大量的 S.O. 帖子,尝试了许多不同的方法,但没有任何一个能如预期般工作。
在您问之前,我已经重新做了多次 App Group,从 iTunes Connect 中删除了旧的 App Group,重新生成了 provisioning profiles,多次清理了 targets,多次删除了 DerivedData,多次删除了应用程序并重新开始,并尝试了几乎所有我可以在 S.O. 上找到的微小调整和修复方法。但是都没有效果。
我确实认为我知道问题所在,但不知道如何克服它。
以下是我在 iPhone 应用程序和 Watch 应用程序中使用的代码,用于获取到共享容器的路径(此代码片段来自 Watch 端)。
let fileManager = FileManager.default
    let sharedContainer = fileManager
        .containerURL(
            forSecurityApplicationGroupIdentifier: "group.com.mycompany.myappname")

    let dirPath = sharedContainer?.path
     sharedFilePathOnWatch = (dirPath! as NSString).appendingPathComponent("watchPreview.mov")

    print ("Shared File Path on Watch: \(sharedFilePathOnWatch)")
    print ("Shared File Path from iPhone: \(sharedFilePath)")

打印语句向我展示了我从iPhone(通过Watch Connectivity)发送到手表的共享文件路径和手表应用程序解析的共享路径。
当此运行时,我得到以下结果:
手表上的共享文件路径:/private/var/mobile/Containers/Shared/AppGroup/94AA7797-528D-4E96-9623-23285BE0742B/watchPreview.mov
来自iPhone的共享文件路径:/private/var/mobile/Containers/Shared/AppGroup/4D43C314-CCBD-4861-BF90-69A8AC71198C/watchPreview.mov
现在我原本期望只有一个共享容器,并且iPhone和手表应该解析相同的路径,但事实并非如此。 我还注意到这些路径在多次运行时保持不变。 它不是每次运行都会更改的动态地址,这让我怀疑一段时间。
为了最后努力使其正常工作,我想既然我有了iPhone上共享容器的路径和Apple Watch上的共享容器,也许我可以将文件从一个移动到另一个,因为它们应该共享。 但是不行,甚至连这个方法也不起作用。
因此,主要问题是:
1.为什么我在共享应用程序中解析出两个不同的路径
2.我该如何将我的小电影文件从iPhone传输到Apple Watch
1个回答

13
随着watchOS2和本地watchOS应用程序的引入,Apple Watch应用程序不再仅仅是其iOS对应程序的扩展,因此它们不共享AppGroups。
watchOS2开始,您不能使用AppGroups来共享数据。您必须使用WatchConnectivity框架在您的和watchOS应用程序之间发送数据。
有关该主题的更多信息,请参见保持您的WatchOS内容最新页面。

2
好的,我已经阅读了这篇文章(在提问之前多次阅读),但令人困惑的部分在于第二部分关于运行时共享文件的内容,这正是我正在尝试做的事情,它指出:使用共享应用组在运行时在Watch应用程序界面和WatchKit扩展之间共享媒体文件。应用程序组创建一个安全容器,多个进程可以访问。通常,每个进程都在自己的沙盒环境中运行,但应用程序组允许两个进程共享一个公共目录。然后按照我所做的完全相同的设置应用程序组的说明进行操作。 - FishTales
2
这是用于在WatchKit应用程序目标和WatchKit扩展目标之间共享文件,而不是在iOS和watchOS应用程序之间共享文件。 - Dávid Pásztor
3
哇,我简直不敢相信苹果的文档没有更明确地说明这一点。我已经花了几天时间尝试理解这个问题。 - Dylan Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接