【发布时间】:2015-12-16 00:53:25
【问题描述】:
我使用默认的 XCode 模板创建了一个 WatchKit 应用程序。 我向 iOS 目标、Watchkit 应用程序目标和 Watchkit 应用程序扩展目标添加了一个应用程序组权利。 (这是应用组名称:group.com.lombax.fiveminutes) 然后,我尝试使用 iOS App 和 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/
观看:
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"
这是我手表的商店网址:
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) ... 返回错误 错误域=NSCocoaErrorDomain 代码=512 "无法保存文件。" UserInfo={原因=创建文件失败;代码 = 2} 与 userInfo 字典 { reason = "创建文件失败;代码 = 2"; }
【问题讨论】:
-
但是您是否尝试过实际放置文件并访问它们?天知道模拟器是如何工作的以及它使用什么文件夹。说到watchOS 2.0。这些现在是本机应用程序。你不应该也添加观看应用的权利吗?
-
是的,我尝试写入文件,它们放在不同的位置,iOS 无法访问手表文件,手表无法访问 iOS 文件。我将权利添加到 iOS 应用程序、手表应用程序和手表扩展程序。权利似乎添加得很好,因为如果我将权利字符串更改为不同的内容,则返回的 NSURL 变为 nil
标签: ios iphone ios-simulator watchkit apple-watch