我使用默认的XCode模板创建了一个WatchKit应用程序。我向iOS目标,Watchkit应用目标和Watchkit应用扩展目标添加了应用组权利。 (这是应用程序组名称:group.com.lombax.fiveminutes)然后,我尝试使用iOS App和WatchKit Extension来访问共享文件夹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 App和WatchKit Extension之间共享数据。
我无法在真实的设备上尝试,因为我的Apple Watch上没有WatchOS 2.0。有什么建议吗?谢谢
UPDATE我做了其他测试:
这是我的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
文件读取和写入。
.sqlite
文件并共享内容。但是,这在实际设备上是不可能的,因为Watch扩展无法写入iOS路径:URL:file:///private/var/mobile/Containers/Shared/AppGroup/3D05D159-94D6-409C-9A38-90E0830D0C3F/FiveMinutes.sqlite选项:(null)...返回错误Error Domain = NSCocoaErrorDomain Code = 512“无法保存文件。” UserInfo = {原因=创建文件失败; code = 2}和userInfo字典{原因=“无法创建文件;代码= 2”;}
好吧,我想我已经找到了答案。我记得在过渡到Watch OS 2时,扩展代码现在直接在Apple Watch上执行,而不再在配对的iPhone上执行。因此,很明显这两个设备没有共享相同的存储。
我要做的第一件事是创建一个新项目,从基本的iOS项目开始,然后添加Watch OS 1(旧版本)App Target。在这种情况下,目录是相同的,它们可以通信:
。在WatchOS 2过渡指南的第一页中,有这句话:观看路径:file:/// Users / Lombardo / Library / Developer / CoreSimulator / Devices / BF52D613-25FF-4092-A5B2-9C3F1B616160 / data / Containers / Shared / AppGroup / 30B39103-CEEB-4C64-9531-FB27DC40180D /
iOS路径文件:/// Users / Lombardo / Library / Developer / CoreSimulator / Devices / BF52D613-25FF-4092-A5B2-9C3F1B616160 / data / Containers / Shared / AppGroup / 30B39103-CEEB-4C64-9531-FB27DC40180D /] >
然后,我做了每个程序员都应该做的第一件事:阅读文档
您的扩展程序现在在Apple Watch上存储文件和数据。必须从网络或从用户iPhone上运行的配套iOS应用程序中获取不属于您的Watch应用程序或WatchKit扩展套件的任何数据。您不能依靠共享组容器与iOS应用程序交换文件。提取文件涉及将它们无线传输到Apple Watch。
我面临着同样的问题。我为iOS应用程序和watchkitapp获得了两种不同的路径。因此,我无法共享数据。我多次删除并创建了watchkit应用。这没有帮助。我的iOS应用程序在iOS 13.1下运行,而watchkit应用程序在watchOS 6.1下运行]