gpt4 book ai didi

ios - containerURLForSecurityApplicationGroupIdentifier : gives different results on iPhone and Watch simulator

转载 作者:可可西里 更新时间:2023-11-01 03:28:25 29 4
gpt4 key购买 nike

我使用默认的 XCode 模板创建了一个 WatchKit 应用程序。我向 iOS 目标、Watchkit 应用目标和 Watchkit 应用扩展目标添加了一个应用组授权。 (这是应用组名称:group.com.lombax.fiveminutes)然后,我尝试使用 iOS 应用程序和 WatchKit 扩展访问共享文件夹 URL:

扩展名:

@implementation ExtensionDelegate

- (void)applicationDidFinishLaunching {
// Perform any final initialization of your application.
NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"];
}

iOS 应用程序:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

NSURL *test = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.lombax.fiveminutes"];
// ...
}

但是,test NSURL 是不同的:

在 iOS 上:

file:///Users/Lombardo/Library/Developer/CoreSimulator/Devices/38B983DB-342F-4A47-8C26-5D2C92CDB666/data/Containers/Shared/AppGroup/8DEE182E-AFE6-47DD-BA2B-6B0520158A8B/

在 watch 上:

file:///Users/Lombardo/Library/Developer/CoreSimulator/Devices/BF52D613-25FF-4092-A5B2-9C3F1B616160/data/Containers/Shared/AppGroup/CECB5EFC-7FBD-4C84-A878-1314CB7CF211/

因此,我无法在 iOS 应用和 WatchKit 扩展之间共享数据。

我无法在真实设备上试用,因为我的 Apple Watch 上没有 WatchOS 2.0。有什么建议吗?谢谢

更新我做了一些其他测试:

  • 安装了 WatchOS 2,问题在真实设备上仍然存在。

这是我的 iPhone 的商店网址:

NSURL * @"file:///private/var/mobile/Containers/Shared/AppGroup/3D05D159-94D6-409C-9A38-90E0830D0C3F/FiveMinutes.sqlite"

这是我 watch 的商店网址:

NSURL * @"file:///private/var/mobile/Containers/Shared/AppGroup/F1E89377-F456-4FC2-BAAC-3DD705EF381A/FiveMinutes.sqlite"

这两个应用程序读取和写入两个不同的 .sqlite 文件。

  • 在模拟器上,如果我对其中一个 URL 进行硬编码,iOS 模拟器和 Watch 模拟器都能够读写相同的 .sqlite 文件并共享内容。但是,这在真实设备上是不可能的,因为 Watch 扩展无法写入 iOS 路径:

URL:file:///private/var/mobile/Containers/Shared/AppGroup/3D05D159-94D6-409C-9A38-90E0830D0C3F/FiveMinutes.sqlite options:(null) ... returned error Error Domain=NSCocoaErrorDomain Code=512 "The file couldn’t be saved." UserInfo={reason=Failed to create file; code = 2} with userInfo dictionary { reason = "Failed to create file; code = 2"; }

最佳答案

好的,我想我已经找到了答案。我记得随着向 Watch OS 2 的过渡,扩展代码现在直接在 Apple Watch 上执行,不再在配对的 iPhone 上执行。因此,很明显这两个设备不共享相同的存储空间。

我做的第一件事是创建一个新项目,从基础 iOS 项目开始,然后添加一个 Watch OS 1(旧版本)App Target。在这种情况下,目录是相同的并且它们可以通信:

Watch Path: file:///Users/Lombardo/Library/Developer/CoreSimulator/Devices/BF52D613-25FF-4092-A5B2-9C3F1B616160/data/Containers/Shared/AppGroup/30B39103-CEEB-4C64-9531-FB27DC40180D/

iOS Path file:///Users/Lombardo/Library/Developer/CoreSimulator/Devices/BF52D613-25FF-4092-A5B2-9C3F1B616160/data/Containers/Shared/AppGroup/30B39103-CEEB-4C64-9531-FB27DC40180D/

然后,我做了每个程序员都应该做的第一件事:阅读文档。在 WatchOS 2 过渡指南的FIRST PAGE 中有这样一句话:

Your extension now stores files and data on Apple Watch. Any data that is not part of your Watch app or WatchKit extension bundle must be fetched from the network or from the companion iOS app running on the user’s iPhone. You cannot rely on a shared group container to exchange files with your iOS app. Fetching files involves transferring them wirelessly to Apple Watch.

关于ios - containerURLForSecurityApplicationGroupIdentifier : gives different results on iPhone and Watch simulator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32659372/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com