问题标签 [wkextension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3280 浏览

objective-c - WatchKit 中 UIApplication.sharedApplication().delegate 的等价物是什么?

在 iOS 应用程序中,您可以通过以下方式获取对共享应用程序委托的引用:

迅速:
let delegate = UIApplication.sharedApplication().delegate as! AppDelegate

目标-C:
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];

在 WatchKit2 App Extension 中有一个类似的 App Delegate,我想在视图控制器中获取对它的引用以访问应用程序中的共享资源,例如核心数据堆栈的 ManagedObjectModel 和 PersistentStoreCoordinator,我已经在应用代表。

但是,UIApplication.sharedApplication().delegate as! AppDelegate报告错误,

使用未解析的标识符“UIApplication”

如何访问 WatchKit2 应用扩展中的应用委托?

0 投票
1 回答
438 浏览

swift - WKExtension.sharedExtension().openSystemURL() 提示何时不应该

我正在为 Apple Watch 开发 iPhone 应用程序的扩展(用运行 WatchOS2.2、Xcode 7.3 的 Swift 编写,在物理设备上进行测试)

我遇到了一个问题,在为以下功能调用 tel 架构时,我希望 Apple Watch 上没有提示/确认:

我没有调用 telprompt 函数,因为我的理解是 Apple 不直接支持它,但它似乎表现得好像是 telprompt。有趣的是,telprompt 不起作用。

我希望这会直接拨打电话号码,而不需要 Apple Watch 上的提示,但是它首先提示用户在左上角显示一个取消按钮,在屏幕中间显示一个号码,在底部显示一个通话按钮. 这似乎也没有获取系统上的本地化(例如法语),因此它始终以英语显示取消和呼叫。

系统语言为法语时提示取消、号码和呼叫的图像

有没有其他人遇到过这个问题?我在网上没有找到太多关于它的讨论。或者这是一个已知问题?同样,我没有看到任何报告的错误。


为本地化找到修复 - 见下文

0 投票
1 回答
258 浏览

ios - 用于实时消息传递的 WKExtension 状态和 sendMessage

我正在开发一个需要与 iOS 应用程序通信的 WatchApp,我正在使用 Watch Connectivity fwk 来做到这一点。

每次用户显示我的 WatchApp 时,我都需要从 iOS 应用程序中获取一组必须在 Watch 上显示的新数据。

为了获取这些数据,我正在使用sendMessage(_:replyHandler:errorHandler:)但有时似乎这种通信不起作用,因为我的 WatchApp 没有更新。从 Xcode 启动 WatchApp 时我没有问题,只有在我在现实生活中使用它时才会出现问题。

每次我的 WatchApp 回调时,我都会触发 WatchApp 和 iOS App 之间的同步:

  • WKInterfaceController.willActivate()(我只有一个Controller)
  • WCSessionDelegate.session(WCSession, didReceiveApplicationContext:
    [String : Any])
    当activationState == .activated
  • WCSessionDelegate.sessionReachabilityDidChange(WCSession)
    会话可达时

在 2015 年 WWDC 的视频“Introducing Watch Connectivity”中,演讲者告诉 WatchKit Extension在向 iOS App 发送交互式消息时必须在前台运行。

这是否意味着除了WCSession.activationState == .activated之外,我还需要在调用sendMessage(_:replyHandler:errorHandler:)之前检查WKExtention.shared().applicationState == .active ?

当我的 WatchApp 在 Dock 中并且用户显示 Dock 时,我的 WatchApp 有一个 WKExtension.shared().applicationState == .inactiveWKExtension.shared().isApplicationRunningInDock == true,我可以使用 sendMessage(_:replyHandler: errorHandler:) 在这种状态下更新我的应用程序?

我只是想知道在使用 sendMessage(_:replyHandler:errorHandler:) 之前需要检查哪些条件。

谢谢,