我正在更新 Watch OS 2.0 客户端应用程序的手表套件支持。
iOS 应用程序向本地通知添加了自定义操作,如果本地通知触发时手机被锁定,手表将显示自定义按钮。
当用户点击该按钮时,分机委托会使用该WCSession sendMessage:replyHandler:方法向电话发送一条消息。
如果当用户点击操作按钮时手机仍然锁定,我想向用户显示一条消息,说“请解锁您的手机”(有关“东西”的详细信息并不重要。)
然而,在 WatchKit 2.0 中,扩展委托是与界面控制器分开的单独生物,并在手表上运行。
我能找到的所有显示界面控制器的方法,例如 presentAlertControllerWithTitle:message:preferredStyle:actions:WKInterfaceController 的方法。
如何从扩展委托显示新的界面控制器?我试图从文档(和谷歌搜索)中找出这一点,但到目前为止,尽管进行了相当广泛的搜索,但我已经排除了这一点。
如何使用 AppCode 运行/调试 WatchOS 应用程序?我刚刚将 XCode 项目导入到 AppCode 中 - 无法运行手表模拟器(尽管有主应用程序的选项)。我缺少什么?
我正在尝试使用 WatchConnectivity 框架将字符串从 Apple Watch 发送到 iPhone。
\n\n我启动了两个会话,一个是 WCSession,一个是 HKSession,因为我想在读取心率信息时将其从手表传输到 iPhone。(如果有更好的方法请告诉我)。
\n\n如果有帮助,我已经发布了我收到的日志消息。
\n\n2017-04-14 20:01:24.660433-0400 MoodTunes WatchKit Extension[180:16033] [WC] -[WCSession _onqueue_notifyOfMessageError:messageID:withErrorHandler:] AD8F92C9-FCAA-45B0-9B4C-0D5C95B72BEE\n errorHandler: YES with WCErrorCodeTransferTimedOut->IDSErrorTypeTimedOut-\n>IDSResponseTimedOut\nWatch send failed with error Error Domain=WCErrorDomain Code=7017 "Transfer \ntimed out." UserInfo={NSUnderlyingError=0x175a7da0 {Error \nDomain=com.apple.identityservices.error Code=23 "Timed out" UserInfo=\n{NSUnderlyingError=0x1752d4f0 {Error Domain=com.apple.ids.idssenderrordomain \nCode=12 "(null)"}, NSLocalizedDescription=Timed out}}, \nNSLocalizedDescription=Transfer timed out.} \nRun Code Online (Sandbox Code Playgroud)\n\niPhone ViewController.swift
\n\nimport HealthKit\nimport WatchKit\nimport Foundation\nimport CoreLocation\nimport WatchConnectivity\nimport UIKit\n\nclass ViewController: UIViewController, CLLocationManagerDelegate, \nWCSessionDelegate { \n\n@IBOutlet weak var timerLabel: UILabel!\n@IBOutlet weak var milesLabel: UILabel!\n@IBOutlet …Run Code Online (Sandbox Code Playgroud) 我正在使用Xcode Version 7.0 beta 3.当试图使用WKInterfacePicker时,我收到一个错误.
这是我的WKInterfaceController的代码:
import WatchKit
import Foundation
class RBWelcomeVC: WKInterfaceController {
@IBOutlet var pickerAllWorkouts: WKInterfacePicker!
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
// Configure interface objects here.
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}
}
Run Code Online (Sandbox Code Playgroud)
注意我的IBOutlet.当我通过控制从故事板拖动创建它时.它创建了插座并立即将此错误:
Use of undeclared type 'WKInterfacePicker'
Run Code Online (Sandbox Code Playgroud)
由于这不起作用,我尝试手动创建插座.我键入:
@IBOutlet …Run Code Online (Sandbox Code Playgroud) 我创建了一个我在iOS应用程序和Watch应用程序中使用的模型类 - 它包含在两个目标中.现在我必须UIPasteboard在这个只能使用的类中使用UIKit,这对watchOS是不可用的.虽然我可以毫无问题地将UIKit导入到这个文件中,但是当我使用UIPasteboard它时它将无法编译,因为手表扩展程序不知道它.
如何UIPasteboard在我的手表应用程序可用的类中使用?
我想知道当设备不是Apple Watch时我是否只能运行该代码#available,但这并没有解决问题.
if #available(iOS 7.0, *) {
UIPasteboard.generalPasteboard()...
//ERROR: Use of unresolved identifier 'UIPasteboard'
} else {
//don't use UIPasteboard
}
Run Code Online (Sandbox Code Playgroud) 如果打开iPhone上的应用程序,我如何从watchOS 2查看?
我想NSUserDefaults通过手表向iPhone 发送消息sendMessage(当收到消息时能够更新手机上的界面)当两个应用程序都在运行时我想发送NSUserDefaults即使只有watchOS 2应用程序正在运行.
根据我的阅读,我发现了这个:
/** The counterpart app must be reachable for a send message to succeed. */
@property (nonatomic, readonly, getter=isReachable) BOOL reachable;
Run Code Online (Sandbox Code Playgroud)
它总是可以从我检查的内容到达.
我有一个带有WatchOS2目标的项目和一个扩展.我想复制WatchOS App目标和扩展.但是,当我复制WatchOS App目标时,它仍然链接到旧的扩展.由于我们无法再访问WatchOS App的构建阶段,因此无法在Embed App Extension阶段进行更改.
无论如何更改WatchOS应用程序目标以接受重复的扩展作为其嵌入的选择(除了手动编辑.pbxproj)
我想知道什么时候会在手表和iOS设备上的WCSession对象上调用activateSession().
在文档中它说:
始终在调用任何与会话相关的方法之前分配代理并激活会话.必须先配置并激活会话,然后才能发送消息或获取有关连接状态的信息.
起初我以为我把我的代码初始化为会话:
if (WCSession.isSupported()) {
session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
Run Code Online (Sandbox Code Playgroud)
在iOS设备上的viewDidLoad和手表端的willActivate中.
它有效...但我不认为这是一个很好的解决方案.我对应用程序生命周期还不太熟悉,但据我所知,每次应用程序打开时都会调用它们.
每次打开其中一个应用程序时,是否会导致"重新连接"?
放置该代码的好地方在哪里?
我有一个iOS项目,有很多pod,大约二十个.我想集成一个watchOS 2应用程序,但CocoaPods要求podspec包含对watchOS的支持(如下所示:http://blog.cocoapods.org/CocoaPods-0.38/)
起初,我以为我可以分叉所有未更新的pod,将我的podfile指向那些分叉的repos,bob是你的叔叔.问题是我正在使用的一些pod是关闭/不公开的.有没有办法让我不为watchOS目标构建主应用程序的pod?就像使用目标隔离一样?:
target "Watch" do
end
我似乎无法获得构建的潜在解决方案,因为它仍然试图构建pod.我也试过这个回购,没有运气:https://github.com/orta/cocoapods-expert-difficulty