为什么 Xcode 为 watch 应用程序创建两个目标?

Why does Xcode create two targets for watch app?

我是 WatchKit 的新手,我想为我现有的 iOS 应用程序开发一个 Watch 扩展。我之前在同一个项目中开发过一个Share Extension,所以我知道一些关于扩展目标是如何嵌入到应用程序中的。

但是,当我使用默认设置添加 Watch 应用目标时,它创建了两个目标,WatchWatch Extension。我很难理解同时拥有两者的目的。 Watch 默认情况下似乎有非模型内容(例如资产、故事板),Watch Extension 似乎有我的实际代码(例如界面控制器)。为什么默认情况下它们不在一起?拆分它们的目的是什么,因为它们将 运行 一起放在手表上?

当 Apple Watch 刚出来时,"Extension"、运行 在 phone 和 "App" 上,其中包含 UI、运行 在手表上。随着 Watch OS 2 的发布,两者都 运行 原生地在手表上,但目标继续分开。希望很快我们就能有一个目标

虽然我不能说它们在构建依赖性方面总是需要是单独的目标,但它们确实在打包方面需要不同,因为应用和扩展 并不 总是 运行 在一起。

与 iOS 类似,.watchkitapp.watchkitextension 包是 .watchkitapp 包的一个独特组件。尽管手表应用程序 确实 需要应用程序扩展程序,但应用程序扩展程序 运行 可以在其应用程序尚未启动的情况下在后台运行。手表甚至可能在前台显示完全不同的应用程序。

例如,如果应用程序扩展程序包含显示在表盘上的复杂功能,则该扩展程序会收到来自 ClockKit 的唤醒请求。它的并发症控制器被实例化(基于扩展的 属性 列表中的信息)以更新并发症服务器。这一切都将独立于手表应用程序而发生。手表应用程序本身不会启动,除非用户碰巧点击了特定的表盘复杂功能。