写点什么

苹果手表应用开发

2015 年 1 月 21 日

在最近的西雅图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

2015 年 1 月 21 日 05:301730
用户头像

发布了 75 篇内容, 共 58.4 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

【干货】内存条的基础讲解,够用绝大多数情况

亚兰—硅的传奇official

计算机基础 内存 装机 硬件

超赞!吃透这份Github点赞120k的Java知识面试笔记Offer拿到手软

比伯

Java 编程 程序员 架构 面试

每个程序员都应该知道的数字

多颗糖

数据库 计算机基础 存储

在历史的天空重逢!大话鲲鹏上海记

脑极体

Java 集合(5)-- Collections源码解析

秦怀杂货店

Java 集合 Collections

ARTS打卡 第24周

引花眠

微服务 ARTS 打卡计划 springboot

架构师训练营 1 期 - 第八周总结(vaik)

行之

极客大学架构师训练营

训练营第四周学习总结

爱码士

训练营

面试官:Redis 主从复制时网络开小差了怎么整?

云流

redis 学习 java面试

高性能-Nginx多进程高并发、低时延、高可靠机制在百万级缓存(redis、memcache)代理中间件中的应用

杨亚洲(专注mongodb及高性能中间件)

nginx memcached 分布式缓存 redis cluster 分布式数据库mongodb

第 4 周作业

Steven

极客大学架构师训练营

限流、熔断与降级

idonkeyliu

后台开发 熔断 限流 降级

Java集合(3)-- iterable接口超级详细解读

秦怀杂货店

Java 源码 Iterator和Iterable 集合 iterable

ARTS打卡 第23周

引花眠

微服务 ARTS 打卡计划 springboot

Java 集合(6)-- Collection源码解析

秦怀杂货店

Java 源码 collection 集合 JAVA集合

va_list 可变长参数原理

liu_liu

c 可变参数 va_list

【薪火计划】02 - 一将功成万骨枯

brave heart

管理

Java集合(2)-- Iterator接口超级详细解读

秦怀杂货店

Java 源码 Iterator和Iterable 集合 Iterator

Java 集合(4)-- iterable和iterator异同分析

秦怀杂货店

Java Iterator和Iterable 集合 iterable

适合初学者的Web Components教程[2019](译)

西贝

Java Web Component 组件

架构师训练营第 1 期 第 8 周作业

李循律

极客大学架构师训练营

过滤Spark数据集的四种方法

大数志

大数据 spark 数据分析 数据科学

SpringBoot系列(5)- 自定义配置

引花眠

springboot

高可用可伸缩微服务架构:基于Dubbo、SpringCloud和ServiceMesh完整蓝光版PDF分享

Java架构追梦

Java 微服务 dubbo Service Mesh SpringCloud

第5周 技术选型(一)-作业

SuGeek

极客大学架构师训练营

我画着图,FluentAPI 她自己就生成了

newbe36524

C# .net .net core netcore

机器学习的产业化变革中,华为云ModelArts的新成绩单

脑极体

Spring改变版本号命名规则:此举对非英语国家很友好

YourBatman

Spring Boot 语义化 Spring Framework 日历化

训练营第4周作业

爱码士

训练营

flink-sql流计算可视化UI平台

无情

sql flink 实时计算 平台

Java集合(1)-- 俯瞰Java集合源码以及分类

秦怀杂货店

Java 源码 Iterator和Iterable JAVA集合

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

苹果手表应用开发-InfoQ