我试图从iPhone应用程序发送数据到手表套件扩展,但失败了。并且不知道该怎么做。
我在模拟器上进行了测试并通过应用程序组发送数据。
这是我的步骤:
- 从苹果下载手表套件目录示例应用程序
- 为 iPhone 应用和 wtach 套件扩展添加应用组 (XXX.XXX.XXX)
- Add RequestOpenAccess: YES for NSExtensionAttributes (watch kit extension)
- 向 iPhone 应用添加一个按钮,该按钮将使用特定的套件名称向 NSUserDefaults 写入一个值
-
在监视工具包扩展中添加代码以读取 NSUserDefaults 数据。([NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:)
-
运行监视套件应用
- 手动单击 iPhone 模拟器中的目录应用程序
- 单击在步骤 4 中添加的按钮
- 在监视工具包扩展处添加断点以查看 NSUserDefaults 值是否已更改
- 什么也没发生
我错过了哪些必要的东西?
或者我应该使用另一种方法来做到这一点?
我想做的只是从iPhone发送数据以每秒观看。数据可以是字符串或图像。
谢谢
为了设置iPhone和iWatch之间的通信,我一直在将文件放入共享应用程序组文件夹中,并从Watch扩展程序对其进行监视。如果iPhone应用程序有任何更改,它会修改文件,并且将通知Watch扩展名并可以对其进行操作。
您需要:
-
在两个目标(iPhone 和手表扩展)上创建一个应用组。确保它已添加到 Apple 开发人员门户上的应用程序 ID 中(有时它不能很好地从 Xcode 传递)。
-
从 iPhone 应用写入应用组:
NSString *destFolderPath = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: @"YOUR_GROUP_STRING"].path; [UIImageJPEGRepresentation(image, 1.0) writeToFile:[destFolderPath stringByAppendingPathComponent:@"Your_Shared_File_Name.jpg"] atomically:YES];
-
从扩展名中读取文件:
UIImage *image; NSURL *groupURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier: @"YOUR_GROUP_STRING"]; NSString *imagePath = [groupURL URLByAppendingPathComponent:@"Your_Shared_File_Name.jpg"].path; } if( [[NSFileManager defaultManager] fileExistsAtPath: imagePath]){ image = [[UIImage alloc] initWithContentsOfFile: imagePath]; }
一般来说,我建议您使用MMWormhole,如果您不需要在手表和主机应用程序之间传递任何太复杂的东西,则可以轻松使用。