转载

苹果手表应用开发

在最近的 西雅图Xcoders聚会 上, Omni Group 的软件工程师Curt Clifton介绍了如何进行苹果手表应用的开发。在这次介绍中 谈及 了手表应用的概念模型,手机和手表之间的数据通信以及应用开发中会遇到一些的挑战。

概念模型

Clifton提到,在开发过程中需要考虑的第一件事就是:在WatchKit 1.0中,代码是运行在一个与iPhone手机应用绑定的扩展中的。

手表本身不会运行任何非苹果开发的代码,不过它可以保存图片资源和经过编译的故事板(Storyboard)。此外,也可以动态地生成图片并将其输送至苹果手表,在苹果手表中为这些图片保留了20MB的缓存空间,不过根据Clifton的经验,这种方式速度很慢并且可靠性不高。

WatchKit框架 目前还相当小,主要由手表上的视图代理类组成。另外,这些类主要提供专用的setter方法,没有getter方法。

苹果手表应用开发

同步选项

由于iOS扩展与其宿主应用运行在不同的进程中,两者之间的数据同步就非常关键。因此,Clifton回顾了目前可用的几种不同的同步机制。

  • NSFileCoordinator : this has been unfortunately ruled out for app↔extension coordination by an Apple technical note
  • NSFileCoordinator :很不幸,在一篇 苹果技术说明 中,这中方案已经被排除,不再作为应用扩展协作的方式。
  • Groups entitlement and user defaults : pretty easy to setup and use, but it will not notify about changes.
  • 组权限 用户默认值 这种方案配置和使用相当容易,不过在发生变化时,不会发送通知。
  • 共享的CoreData/SQLite 数据库: 据Clifton介绍,是相当不错的一种机制。
  • 种子文件和回调: Clifton在其示例应用中使用并且更加详细描述的一种解决方案。

    苹果手表应用开发

    • iPhone宿主应用向共享应用容器中写入一个种子文件,其中承载着某种格式的负载,如JSON格式。
    • 手表扩展读取数据种子文件,然后在其准备向父应用返回某个用户操作时,会调用openParentApplication:reply:方法,将处于后台的宿主应用唤醒。父应用接收到一个回复块,在其准备就绪后,将调用这个回复块。
    • 宿主应用可以更新种子文件中的数据然后运行回复块,将新的数据传递给扩展。
    • 手表扩展不再需要读取种子文件,它只需要通过回复块就可以在内存中更新其接收到的数据。

在演示的下一部分,Clifton走查了他的 示例应用 源代码并向观众演示如何在Xcode中进行调试,调试过程类似于任何一个iOS 8应用扩展的调试过程。

挑战

这次讨论的最后一个部分是关于开发者将会面临的挑战。

  • 如我们之前提到的,WatchKit只提供setter方法,因此第一个挑战就是向未处于活动状态的控制发送命令。这可能会导致数据不一致,可以通过让每个类跟踪其控制状态是活动还是不活动来解决这个问题。在示例应用中,是通过一系列_updateDisplay*方法实现的。
  • 如果在 Xcode文件拷贝构建步骤 能够拷贝框架,可以在宿主应用和手表扩展之间使用共享的框架。
  • 不支持自动布局,可以用从左至右,从上到下填充的组替换;可以用组内加组的方式构建较为复杂的UI,不过这是一个和自动布局完全不同的模型。
  • 最后,现在还不知道手表的通知接口的具体情况,而且如何处理来自于手表的通知也尚不清楚。

可以在 GitHub 上找到Clifton的示例应用。

查看英文原文: Developing an Apple Watch App

正文到此结束
Loading...