天道酬勤,学无止境

watchkit

WatchKit 拉动刷新(WatchKit pull to refresh)

问题 是否可以实现类似于 Watch 电子邮件应用程序的拉动刷新? 如果不是,我应该如何处理更新WKInterfaceTable ? 我真的不希望应用程序在加载时自动刷新,因为这违背了拥有快速手表应用程序的目的。 回答1 不幸的是,目前不可能。 WKInterfaceTable与其他 WatchKit 类一样,并没有提供太多监控状态的方式。 无法监控滚动位置。 您目前可以做的最好的事情是在您的 UI 中添加一个按钮来启动数据刷新或使用强制触摸菜单。

2022-01-16 15:10:03    分类:技术分享    ios   watchkit

如何为手表套件应用程序播放声音(How to play a sound for watch kit app)

问题 据我了解,目前无法在手表上播放您的手表套件应用程序的声音。 如果是这种情况,播放声音的最佳方式是什么? 目前我正在使用openParentApplication:reply:在播放声音的手机上运行代码。 这是最好的方法吗? 更新:我还发现我可以使用与父应用程序相同的方法直接从手表扩展播放音频。 不知道这是否会在不在模拟器上时真正播放。 回答1 目前没有任何方法可以在 Watch 上播放音频。 你的假设是 100% 正确的。 Apple 不希望在运行时将音频剪辑从 Watch Extension 传输到 Watch。 目前,唯一支持的传输缓存系统是图像。 现在,您必须在 iOS 设备上播放音频。 您可以使用以下方法之一来触发播放声音: openParentApplication:reply: - 如果当前未运行,则在后台打开应用程序通过 MMWormhole 之类的达尔文通知 从 Watch 扩展播放声音肯定是一个灰色区域。 我的猜测是它会在 iOS 设备上播放,或者在使用设备进行测试时根本不播放。 不过,我当然会反对这种方法。 您的手表扩展程序通常只会在很短的时间内打开。 从 iOS 应用程序播放音频会更好,因为它可以保证继续运行。 回答2 从 watchOS 2 开始,您可以在手表上使用WKAudioFilePlayer播放音频文件。 似乎不支持 mp3 文件,但 caf

2022-01-16 12:27:31    分类:技术分享    ios   watchkit

WatchKit pull to refresh

Is it possible to implement a pull to refresh similar to the Watch email app? if not how else should I handle updating a WKInterfaceTable? I don't really want the app to do an automatic refresh on load as this defeats the purpose of having a quick watch app.

2022-01-16 08:42:24    分类:问答    ios   watchkit

How to play a sound for watch kit app

From what I understand it is currently not possible to play a sound from your watch kit app on the watch. If this is the case what is the best way to play a sound? Currently I am using openParentApplication:reply: to run code on the phone that plays the sound. Is this the best way? Update: I also found that I can play audio directly from the watch extension using the same methods as in the parent app. No Idea if this will actually play when not on the simulator.

2022-01-16 04:26:29    分类:问答    ios   watchkit

阻止 WorkoutSession 更新活动环(prevent WorkoutSession to update Activity ring)

问题 我正在开发一个苹果手表应用程序(WatchOs4)。 我有兴趣监测心率,所以我使用 WorkoutSession 来获取持续的数据更新。 问题是:当我开始锻炼时,它会自动更新手表上活动环的锻炼环。 由于它不是一个运动应用程序,我想防止这种情况发生。 有没有人有解决方案? 回答1 请查看 https://developer.apple.com/documentation/healthkit/hkworkoutsession 填充戒指部分。 将您的锻炼设置为以下活动之一:跑步、步行、骑自行车、爬楼梯、椭圆机和划船活动,这些活动提供定制的卡路里计算。 因此,如果您不移动,则不会对戒指做出任何贡献。 仅供参考,我只尝试过室内步行。 回答2 我刚刚发现,如果您暂停锻炼,仍会收集心率,但不会收集卡路里和锻炼分钟数。 session.startActivity(with: Date()) session.pause() builder.beginCollection(withStart: Date()) { (success, error) in guard success else { // Handle this return } } 这真的很容易。 数月试图弄清楚这一点,互联网没有答案。 请注意,从技术上讲,健康应用程序仍会显示正在收集的卡路里,但它似乎只有每小时 15-20 卡路里

2022-01-15 06:39:02    分类:技术分享    watchkit   healthkit   watchos

使用 updateApplicationContext 发送钥匙串值是否安全(Is it safe to use updateApplicationContext to send keychain value)

问题 在 watchOS 2 中,不再有共享钥匙串。 如果我想将钥匙串值从 iOS 应用程序发送到 Watch 应用程序,通过 WCSession updateApplicationContext 发送它是否安全? 回答1 是的。 如果您的钥匙串值没有改变,并且您反复更新您的应用程序上下文,您可能希望安排只发送一次值(以便手表添加到其钥匙串中),而不是反复重新发送钥匙串值。 一位 Apple 工程师在开发者论坛上讨论使用 Watch Connectivity 发送钥匙串项目: 如果您想在手表上访问手机上的数据,您的应用可以使用 WatchConnectivity 传输所需的特定数据和钥匙串项目。 Apple Watch 上的钥匙串包含与配对 iPhone 上的钥匙串不同的一组条目,因此如果您在两个地方都需要某些东西,您可以为每台设备生成一次,或者使用 WatchConnectivity 在它们之间传输。 更新: 在 watchOS 2 中,Watch Connectivity 是在配对手机和手表之间传输数据的机制。 根据 iOS 安全指南,设备之间的通信是加密的。 至于字典是否可以在内存中访问,或者在您的扩展程序收到它之前它如何被持久化,我认为您必须依靠 Apple 来解决任何可能的漏洞。 可以合理地说,信息不像钥匙串那样安全,直到您的扩展程序唤醒,接收更新,然后将值存储在钥匙串中

2022-01-15 00:25:23    分类:技术分享    ios   watchkit   watchos-2   watchconnectivity

Is it safe to use updateApplicationContext to send keychain value

In watchOS 2, there are no more shared keychains. If I want to send a keychain value from the iOS app to the Watch app, is it safe to send it via WCSession updateApplicationContext?

2022-01-15 00:07:44    分类:问答    ios   watchkit   watchos-2   watchconnectivity

在不使用 dispatch_once_t 的情况下转换 Swift 3 代码(Converting Swift 3 code without use of dispatch_once_t)

问题 在迁移到 Swift 3 之前,我有以下代码: //Set up singleton object for the tracker class func setup(tid: String) -> WatchGATracker { struct Static { static var onceToken: dispatch_once_t = 0 } dispatch_once(&Static.onceToken) { _analyticsTracker = WatchGATracker(tid: tid) } return _analyticsTracker } 我收到以下错误: 'dispatch_once_t' is unavailable in Swift: Use lazily initialized globals instead 显然,转换工具将代码转换为: class func setup(_ tid: String) -> WatchGATracker { struct Static { static var onceToken: Int = 0 } _ = WatchGATracker.__once return _analyticsTracker } 在我班的顶部,它添加了这个: private static var __once: () = {

2022-01-14 17:11:07    分类:技术分享    ios   swift   xcode   watchkit   swift3

等待另一个委托的目标 c 块(objective c block that waits for another delegate)

问题 我有一个 watchkit 应用程序,它在 iphone 应用程序上调用视图控制器。 我有一个网络连接的代表。 我正在尝试使用一个块,这样我的 AppDelegate 和我的视图控制器就不会太紧密地耦合在一起。 委托完成后如何通知我的区块? 视图控制器.m -(void)getWatchDataWithCompletion:(void(^)(BOOL gotData))completion{ [self setUpAppForWatch]; completion(YES); } -(void)finishedMessageParse:(NSMutableData *)messageData{ //the delegate is finish tell the block completion is done. } -(void)setUpAppForWatch{ [network call]; } AppDelegate.m -(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^) (NSDictionary *))reply{ [vc getWatchDataWithCompletion:^

2022-01-14 12:58:19    分类:技术分享    ios   objective-c   objective-c-blocks   watchkit

Converting Swift 3 code without use of dispatch_once_t

Prior to migrating to Swift 3, I had the following code: //Set up singleton object for the tracker class func setup(tid: String) -> WatchGATracker { struct Static { static var onceToken: dispatch_once_t = 0 } dispatch_once(&Static.onceToken) { _analyticsTracker = WatchGATracker(tid: tid) } return _analyticsTracker } I get the following error: 'dispatch_once_t' is unavailable in Swift: Use lazily initialized globals instead Apparently, the conversion tool converted the code to this: class func setup(_ tid: String) -> WatchGATracker { struct Static { static var onceToken: Int = 0 } _ =

2022-01-14 12:30:47    分类:问答    ios   swift   xcode   watchkit   swift3