Xcode 7 支持 watch OS1 和 OS2

Posted

技术标签:

【中文标题】Xcode 7 支持 watch OS1 和 OS2【英文标题】:Xcode 7 supporting watch OS1 and OS2 【发布时间】:2015-06-22 07:55:49 【问题描述】:

我一直在摆弄 Xcode 7,我知道它只支持 Swift 2,并且无法在 Xcode 7 中支持 Swift 1.0 或 1.2。这很好。

现在来到 WatchOS,我可以在 Xcode 7 中分别有两个目标,一个用于 WatchOS1,一个用于 WatchOS2,以便我可以同时支持这两个目标吗??

我正在查看监视目标和 ios 应用程序目标的构建设置中的部署目标设置,但我只能在列表中看到 WatchOS2,所以

    我能否在 Xcode 7 中支持两个目标,分别用于 WatchOS1 和 WatchOS2?如果是这样,我应该在某个地方安装 WatchOS1 SDK 吗?或者 这完全不可能,如果不是为什么?

    如果两个目标都可以支持,我如何防止两个目标的源重复,因为两个操作系统都有重要的 架构方面的差异。

    另外由于WatchConnectivity框架的引入iOS对应的app也会有一些变化,如何维护 两个目标?

我很困惑,我需要尽快做出决定,感谢任何帮助。

【问题讨论】:

@Droppy 但是在 iOS 目标中,我可以在列表中看到较低版本的 iOS。为什么会这样? @Droppy 是的,我也这么认为,但如果我需要同时支持这两者怎么办,祈祷吧! 【参考方案1】:

您可以在 Xcode 7 中支持 watchOS 1 应用。 您还可以在 Xcode 7 中支持 watchOS 2 应用。

如果您想同时支持 watchOS 1 和 watchOS 2,那么您需要为每个操作系统设置单独的目标(由于架构的差异)

对于 watchOS 1 应用,添加新目标并从左侧选择 Apple Watch 部分,然后从列表中单击 WatchKit App for watchOS 1

对于 watchOS 2 应用,添加新目标并选择 watchOS > Application 部分,然后点击 WatchKit App 选项列表。

在 Xcode 7(beta 1)中制作 watchOS 1 应用程序需要注意的几点...

因为我在运行 iOS 8.3 的 iPhone 6 和运行 watchOS 1.0.1 的手表上进行了测试,所以我需要将部署目标更改为 iOS 8.3,但请注意,您希望在项目级别执行此操作,而不仅仅是目标级别(以便扩展程序也设置为 8.3,而不仅仅是主应用程序),否则它不会让您部署到真实设备上。

由于 Xcode 7 beta 1 中的一个已知问题,如果您配对的手机是 64 位,watchOS 1 应用程序将无法在真实手表上安装并出现以下错误:

Jun 20 17:25:08 Liams-iPhone companionappd[271] <Notice>: (Error) WatchKit: validateWatchKitApplicationInfoDictionary, invalid Info.plist key 'UIRequiredDeviceCapabilities'

这是因为 Xcode 7 在构建时将 arm64 添加到 UIRequiredDeviceCapabilities info.plist 键,甚至在不应该添加的时候添加到 watchOS 1 扩展。

您可以通过将 Build Active Architecture Only 设置为 NO 来暂时解决此问题,以用于调试模式。

希望有帮助

【讨论】:

感谢 liam 的详细回答,但我有几个问题,请查看我更新后的问题。 您如何测试 watchos1 应用程序?因为我没有看到下载 watchos1 模拟器的选项 我不确定模拟器,但我知道你可以在运行 watchOS 2.x 的物理设备上运行它【参考方案2】:

您可以同时拥有适用于 iOS 9 iPhone 的 watchOS 2 应用和适用于 iOS 8 设备的 watchKit Extension。

我想说的是,如果您还没有制作 WatchKit 应用程序(如在 watchOS 1 中),那么制作 watchOS 2 应用程序并尝试创建和维护 watchOS 1 应用程序是非常低效的……跳吧出于理智目的,登上 watchOS 2!

【讨论】:

否 @Daniel 我已经有一个 WatchKit 1 应用程序,由于发布日期,我想表明立场。 所以手表工程师在 WWDC 上鼓励我不要将我的 watchOS 1 应用程序“迁移”到 2,而只需为 watchOS 2 应用程序创建一个新目标并让它们共存。 好吧有道理,但你知道如何为这两个目标处理代码吗? 您可以将接口控制器中的 os1 特定 API 使用删除到一个类别或单独的类中,然后在两个目标中使用该精简的接口控制器类。我的应用程序可能会被完全重写,所以我没有这个担心,但我可能会这样做。 Xcode 7:有没有人看到手表套件 1.0 应用程序和扩展的部署目标的下拉列表中只有手表套件 2.0 可用?为 WK1.0 目标尝试了现有项目和新项目以及相同的结果。我确实将关联的 iOS 应用程序设置为 8.3 目标,但仍然没有运气。我必须从早期版本的 Xcode 中提取 1.0 WK SDK 吗?想知道有没有人做过。

以上是关于Xcode 7 支持 watch OS1 和 OS2的主要内容,如果未能解决你的问题,请参考以下文章

当用户将应用程序从手表 OS1 升级到手表 OS2 时,我的手表 OS2 应用程序不显示在 iPhone 的“我的手表”应用程序中

OS 学习笔记 虚拟机

百战c++(os1)

百战c++(os1)

百战c++(os1)

Xcode 7 安装 Apple Watch 应用程序从未完成