Apple Watch:一个 Watchkit App 可以与多个 iOS App 通信吗?

Posted

技术标签:

【中文标题】Apple Watch:一个 Watchkit App 可以与多个 iOS App 通信吗?【英文标题】:Apple Watch: Can one Watchkit App communicate with more than one iOS App? 【发布时间】:2015-06-25 19:09:27 【问题描述】:

我想编写一个可以与多个 iPhone 应用程序通信的 Watchkit 应用程序。

例如,我们将这个 Watchkit 应用程序称为“PingPong”。它所做的只是设置一个观察者,并响应一个请求——类似于 ICMP ping 请求。因此,当应用向手表发送“PING”时,PingPong Watchkit 应用会以“PONG”响应。

如何让多个应用都可以访问此功能?也就是说,我想把这个非常简单的接口暴露出来,让不同的应用可以使用它。

请注意,文档声明“您必须有一个现有的 ios 应用程序才能创建 WatchKit 应用程序。WatchKit 应用程序是作为 Xcode 项目的一个单独目标实现的,并且是在您的 iOS 应用程序包中构建和打包的...... Xcode为您的 WatchKit 应用程序和 WatchKit 扩展配置目标并将所需的文件添加到您的 iOS 项目。两个新目标的捆绑包 ID 是根据您的 iOS 应用程序的捆绑包 ID 自动配置的。所有三个捆绑包的基本 ID 必须匹配; 如果您更改 iOS 应用程序的捆绑包 ID,则必须相应地更新其他捆绑包 ID。” https://developer.apple.com/library/ios/documentation/General/Conceptual/WatchKitProgrammingGuide/ConfiguringYourXcodeProject.html#//apple_ref/doc/uid/TP40014969-CH2-SW1

这意味着 iOS 扩展应用和 watchkit 应用之间存在一对一的关系。含义? Watchkit 应用程序本质上是沙盒化的,这是不可能的。但问起来也无妨。这就是 SO 的用途,对吧? :P

谢谢,基思 :)

【问题讨论】:

我不认为,watchkit 开发的当前状态允许与多个 ios 应用程序进行通信。 【参考方案1】:

实际上,watchOS 应用与 iOS 配套应用相关联。

在这两个版本中,每个 watchOS 应用程序都有两个目标:WatchKit 应用程序 - 包含故事板、图标等 - 和 WatchKit 扩展程序,其中包含代码。

在watchOS 1(旧WatchKit)+iOS 8组合中,Apple Watch上安装了WatchKit App,用户的iPhone上同时安装了WatchKit Extension和iOS应用。

换句话说,在watchOS 2 + iOS 9组合中,WatchKit App和WatchKit Extension都安装在用户的Apple Watch上,而iOS App是唯一安装在iPhone上的代码和视图。

运行 iOS 应用只需要一个目标,因此它可以在没有 Apple Watch 的情况下运行(从第一个 iPhone 操作系统开始)。

但是运行 watchOS 应用需要 WatchKit App 和 WatchKit Extension。在 watchOS 1(旧的 WatchKit)中,因为一个在 iPhone 上,另一个在 Apple Watch 上,所以运行的应用程序需要通过蓝牙在它们之间连接,所以你必须随身携带你的 iPhone。在 watchOS 2 中,两者都在 Apple Watch 上,因此运行应用程序不需要连接到 iPhone 和附近有 iPhone。您可以将它们与 watchOS 2 SDK(在 Xcode 7 中)中包含的 WatchConnectivity 框架连接。

所以在 watchOS 2 中,应用程序可以独立运行,但它们根本不是独立的。它们在 iPhone 上安装时安装在 Apple Watch 上,并且可以相互连接。当您创建新的 watchOS 应用程序时,您必须在将其提交到 iTunes Connect 时将其包含在您的 iPhone 应用程序中。

注意:这使 watchOS 应用更加快速和可靠。

因此,在这两个版本中,每个 WatchKit 应用程序都与一个扩展程序和一个 iOS 应用程序相关联,因此您不能将一个 watchOS 应用程序链接到多个 iPhone 应用程序,或者将一个 iOS 应用程序链接到多个 WatchKit 目标。 (例外情况是为 watchOS 1(旧 WatchKit)和 watchOS 2(它们都是一个应用程序,但在两个不同版本的手表操作系统中)创建两个目标。

总之,您不能将多个 watchOS 应用或多个 iOS 应用链接在一起。 这是 watchOS 1 和 2 中的事实,并且将来可能会改变。

【讨论】:

注意:您可以使用服务器或网络进行通信,但这不是 Apple 的做法(蓝牙低功耗)。所以你必须连接到第一个应用程序,并且在后台第一个应用程序连接到第二个应用程序。它有效,但我认为这不是你想要的方式。【参考方案2】:

你可以做到这一点。

但仅限于两个 iOS 应用由同一开发者开发的情况。

要走的路是将所有三个应用程序放在同一个应用程序组中。 这将允许所有三个应用程序访问一个公共存储,它们可以存储他们的信息以供其他应用程序访问。

此功能用于 iOS App Watch OS 1 中的 Watch App 通信以及与今天的扩展程序通信。

您可以在此处找到使用应用组的教程: http://www.codingexplorer.com/share-data-in-your-swift-watchkit-apps-with-app-groups/

【讨论】:

我会将其重写为“不,但有办法解决它。”实际上,每个手表套件应用程序都与一个且只有一个 iOS 应用程序链接,并且只能与那个应用程序进行通信。但是,正如您所说,您可以使用应用程序组在一个 WatchKit/iPhone 应用程序对和另一个应用程序对之间交换数据。

以上是关于Apple Watch:一个 Watchkit App 可以与多个 iOS App 通信吗?的主要内容,如果未能解决你的问题,请参考以下文章

Apple Watch (WatchKit) 推送动作

Apple Watch、WatchKit 和 NSUserDefaults [重复]

Apple Watch:一个 Watchkit App 可以与多个 iOS App 通信吗?

WatchKit 通知:38 毫米 Apple Watch 上的视图被截断?

是否可以在实际 Apple Watch 设备上运行 WatchKit 应用程序?

WatchKit WatchOS - Apple Watch 上从未显示定位服务提示