最近,我正在研究一个与Watch/ iPhone通信有关的项目.但是我的代码有时工作并且有时不起作用,这对我来说有点奇怪,因为我认为代码应该工作与否.它不能是50/50.因此,我不知道出了什么问题.
在iPhone上设置WCSession:
class WatchCommunicationController: NSObject, WCSessionDelegate {
var session : WCSession?
override init(){
// super class init
super.init()
// if WCSession is supported
if WCSession.isSupported() { // it is supported
// get default session
session = WCSession.defaultSession()
// set delegate
session!.delegate = self
// activate session
session!.activateSession()
} else {
print("iPhone does not support WCSession")
}
}
... ...
}
Run Code Online (Sandbox Code Playgroud)
Watch上类似的WCSession设置:
class PhoneCommunicationController: NSObject, WCSessionDelegate {
var session : WCSession?
override init(){
// super class init
super.init()
// if …Run Code Online (Sandbox Code Playgroud) 我一直在尝试修改我的项目以支持WatchOS2架构.目前我有一个基于AFNetworking的网络框架.到目前为止,我一直在使用我的手表应用程序.现在我正在尝试为watchos/watchsimulator平台构建框架.
我得到的是一些AFNetworking类的'SystemConfiguration/SystemConfiguration.h'文件找不到错误.
我知道系统配置不是watchOS2的可用系统框架之一.对于网络苹果说:
联网
对基于网络的操作的支持包括以下技术:
WatchKit扩展可以使用NSURLSession对象直接访问网络.WatchKit扩展可以完全访问NSURLSession功能,包括在后台下载文件的功能.有关如何使用此类的信息,请参阅URL加载系统编程指南.Watch Connectivity框架支持Watch应用程序和iOS应用程序之间的双向通信.使用此框架来协调两个应用程序之间的活动.有关更多信息,请参阅与您的Companion iOS应用程序通信.
我想为我的网络sdk支持iOS和watchos.有没有办法为watchOS平台构建这个项目?或者这是否意味着我只允许在我的手表应用程序中使用NSURLConnection?
我们正在开发一个Apple Watch项目,但如果不间断的话,手表会进入睡眠状态.
有什么方法可以阻止它进入睡眠状态吗?
在我的项目中,我使用app group将数据传输到apple watch!这看起来像这样
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
sharedDefaults?.setObject(MyData, forKey: "DataKey")
sharedDefaults?.synchronize()
Run Code Online (Sandbox Code Playgroud)
在WKInterfaceController中,我使用以下代码获取数据:
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
let MyData = sharedDefaults?.objectForKey("DataKey") as! [[AnyObject]]
Run Code Online (Sandbox Code Playgroud)
一切正常!
现在我尝试检测sharedDefaults中的数据?.objectForKey("DataKey")是否确实发生了变化.我尝试使用addObserver方法:
override func willActivate() {
NSUserDefaults(suiteName: "group.com.myappname.defaults")!.addObserver(self, forKeyPath: "DataKey", options: NSKeyValueObservingOptions.New, context: nil)
}
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>){
print("Data Changed")
}
Run Code Online (Sandbox Code Playgroud)
但是"覆盖func observeValueForKeyPath"仅在WKInterfaceController激活时调用,并且当我在NSUserDefaults中更改数据时没有调用(suiteName:"group.com.myappname.defaults")
我也尝试使用NSNotificationCenter:
override func willActivate() {
let sharedDefaults = NSUserDefaults(suiteName: "group.com.myappname.defaults")
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(userDefaultsDidChangeNotificationMethod(_:)), name: NSUserDefaultsDidChangeNotification, object: nil)
}
func userDefaultsDidChangeNotificationMethod(notification: NSNotification){
print("Data Changed") …Run Code Online (Sandbox Code Playgroud) 在WWDC 2015中,提到手表支持本机应用程序,但我没有看到新Xcode 7中的选项,只是用同伴应用程序构建苹果手表应用程序.如果存在,请告诉我这样做的方法.
当我尝试在我的iPhone(iOS 9.0b2)上构建我的Watch OS 2应用程序时,我收到以下错误,该应用程序与我的Apple Watch(watchOS 2.0b2)配对.
你的iPhone不可用.请选择其他设备,然后重试.
我已经尝试了所有显而易见的事情,重新启动iPhone,Watch,Mac等.我的所有软件都更新到最新版本,我的手表与我的iPhone配对.有没有人有任何想法?
我怎么能转移的UIImage过WatchConnecitivity从iPhone到苹果手表只加载在手机上无需用户交互,而且由于手表它调用编程.我需要这个,因为用于创建UIImageWatchkit API中不可用的使用逻辑的图像处理,所以它必须从手机创建.我似乎有一些使用Watch Connectivity的例子:
func startSession() {
session?.delegate = self
session?.activateSession()
}
Run Code Online (Sandbox Code Playgroud)
但是,我对手表套件和iOS一般都很陌生,对于如何使用这个会话管理器很困惑,特别是从手表到设备,而不是像我在网上的例子中看到的那样.有人可以提供一个如何在手表和手机上执行此操作的示例,以便UIImage从手表上拨打电话吗?
我需要制作一个近乎实时记录心率数据的应用程序,并尽快将此数据发送到服务器.
首先我采用了这种方法:观看os 2.0 beta:访问心率
事实上,它工作正常.HealthKit每五秒钟会有一个新的心率数据.但现在我遇到了无法与服务器同步的问题.
我的第一个方法是Watch应用程序.手表正在向服务器发送数据.这不起作用,因为一旦手表上的屏幕变黑,它就会停止发送.
我的下一个方法是每隔5秒在iPhone上查询HealthKit以获取新数据.只要应用程序位于前台,这就有效.
然后我看到有一些背景功能可以监视HealthKit本身并从后台撤消应用程序,你可以做一些事情.(enableBackgroundDeliveryForType)这似乎不适用于心率(Apple文档说的这样的事情,如步骤这不起作用,我猜心率是其中之一).
我现在被困住了.你知道怎么做吗?我需要在iPhone上每5-10秒执行一次后台任务.这似乎是不可能的
当我使用WKInterfaceSwitch时,watchOS在整个控件后面绘制半透明背景.我不希望出现此背景,但无法找到隐藏或禁用它的任何方法.
这可能吗?
我有一个使用现有的iOS 9.2和2.1 watchOS应用sendMessage,并transferUserInfo从iPhone将数据发送到Apple关注.如果sendMessage失败,我将使用transferUserInfo队列数据以便以后交付:
// *** In the iOS app ***
self.session.sendMessage(message, replyHandler: nil) { (error) -> Void in
// If the message failed to send, queue it up for future transfer
self.session.transferUserInfo(message)
}
// *** In the watchOS app ***
func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
// Handle message here
}
func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {
// Handle message here
}
Run Code Online (Sandbox Code Playgroud)
在没有更改任何代码并在真实设备上使用watchOS 2.2在iOS 9.3上运行应用程序(模拟器没有相同的问题),sendMessage …