IOS开发:WatchKit的应用程序要点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS开发:WatchKit的应用程序要点相关的知识,希望对你有一定的参考价值。
参考技术A WatchKit应用程序架构
WatchKit
应用程序是一个运行在
Apple
Watch
中的可执行文件。它包括
storyboard
和渲染屏幕时所需的资源文件。
WatchKit
扩展则是运行在
iPhone
上的可执行文件。包括管理应用程序界面的逻辑代码,以及处理用户的交互操作。
为了程序界面的正常使用,这两部分需要一起运行。用户与应用程序交互的典型步骤如下:
用户与
WatchKit
应用程序交互。
WatchKit
应用程序分析交互情况,并选择将被管理的
storyboard。
WatchKit
与
iPhone
通讯,以运行
WatchKit
扩展。
WatchKit
扩展初始化并创建需要提供给
WatchKit
应用程序
storyboard
使用的对象。
Storyboard
根据
WatchKit
扩展创建的对象,生成
scene,并将其显示到
Apple
Watch
中。
WatchKit
应用程序和
WatchKit
将会共享一些信息,直到用户停止使用
WatchKit
应用程序。此时,ios
将使
WatchKit
扩展休眠,直到有新的用户交互。
下面的这个图演示了这个流程:
上图中有个重要的概念就是
storyboard
响应用户的操作并配置需要显示的屏幕内容的方法。这归功于
interface
controller对象
(WKInterfaceController的实例),相当于
iOS
中的
view
controller。
与
view
controller
不同的是
interface
controller
不管理屏幕中实际的
view,WatchKit
以透明的方式对
view
进行处理。一般,一个
WatchKit
应用程序会有多个
interface
controller,用来显示不同的数据类型,只不过同时只显示一个罢了。
WatchKit
应用程序的生命周期
一个
WatchKit
应用程序的启动方式有
3
种:
用户点击
Apple
Watch
主屏幕上的图标。
用户与应用程序的
glance
交互。
用户与通知交互。
上面的每种方式都将初始化
WatchKit
应用程序和
WatchKit
扩展。根据上面不同的启动方式,WatchKit
会利用相应的
storyboard
加载
scene,并请求
WatchKit
扩展初始化相应的
interface
controller。
下面的图演示了相关过程:
如图所示,在用户界面中,interface
controller
对象管理着相关交互。当用户与
Apple
Watch
上的应用程序交互时,WatchKit
扩展会运行。一旦用户停止交互或者从程序中退出,iOS
将关闭当前的
interface
controller,并休眠扩展。在用户和
Apple
Watch
之间,这样的交互方式非常简洁,interface
controller
应该是轻量级的,并且快速的执行任务。
下面的图演示了相关过程:
在 WatchKit 应用未运行时从 iOS 应用设置 WatchKit 应用的值
【中文标题】在 WatchKit 应用未运行时从 iOS 应用设置 WatchKit 应用的值【英文标题】:Setting a value for WatchKit app from iOS app when WatchKit app isn't running 【发布时间】:2016-08-19 08:17:42 【问题描述】:我已经知道如何使用 WCSession 的 updateApplicationContext
方法,但它只在我的 WatchKit 应用程序运行时有效。
我需要将货币汇率从 iOS 应用程序传输到手表,以更新我的手表数据和复杂功能。
我有一个 API 可以获取 USD-CNY 和 USD-EUR 的汇率,并希望与手表共享(类似于 NSUserDefaults
保存数据的方式),因此它可以显示“1 USD = 6.3人民币”在我的并发症中。
那么,我该怎么做呢?
【问题讨论】:
【参考方案1】:对于 watchOS 2
只有一种WCSession
方法可以让您在手表应用未激活时更新您的并发症数据。
假设您的并发症处于活动状态,并且您没有超过the (iOS 10) number of transfers per day,transferCurrentComplicationUserInfo
将在后台唤醒您的手表扩展,并立即将用户信息传输到您的扩展。
然后,您的扩展程序可以将这些数据保存在手表上(供手表应用在激活时使用),在更新您的复杂功能之前。
func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject])
if let ... // Retrieve exchange rate data from dictionary
// Add code here to update your cache/backing store with exchange rate
// ...
// Now update the complication
let complicationServer = CLKComplicationServer.sharedInstance()
guard let activeComplications = complicationServer.activeComplications else // watchOS 2.2
return
for complication in activeComplications
complicationServer.reloadTimelineForComplication(complication)
对于 watchOS 3
watchOS 3 支持后台刷新应用任务。这意味着您的手表应用现在可以在后台更新自身、停靠快照和复杂功能。
我已经covered this information in an existing answer,但将在这里总结关键要点:
Apple 建议您利用所获得的每个机会,无论您的应用是在前台还是在后台,以使您的复杂功能、应用和停靠快照保持最新。
这是一个根本性的变化,从仅在应用未激活时更新复杂功能,到现在更新所有内容 -- 复杂功能、应用和停靠快照 -- 不管你的手表应用是在前台还是后台。
关于更新频繁更改数据的限制说明
无论您使用哪种方法,请记住,您每天或每小时可以执行的更新数量将是 limited。
按照 Apple 的建议,您应该考虑将汇率更新安排在需要的时间。这两个课程涵盖了何时(以及如何)更新您的手表应用:
804 Designing Great Apple Watch Experiences 讨论何时以及为何更新您的手表应用。
218 Keeping Your Watch App Up to Date 提供有关使用后台任务更新复杂功能、应用程序和停靠快照的详细信息。
【讨论】:
感谢您的回答,但如果不运行 WatchKit,则无法调用“func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject])”。而且我肯定没有赶上并发症的每日限制,我现在仍然无法解决我的问题。 您需要activate the session in the extension delegate'sinit
method。这将允许扩展程序接收用户信息,即使手表应用程序未运行。以上是关于IOS开发:WatchKit的应用程序要点的主要内容,如果未能解决你的问题,请参考以下文章