当我使用WKInterfaceSwitch时,watchOS在整个控件后面绘制半透明背景.我不希望出现此背景,但无法找到隐藏或禁用它的任何方法.
这可能吗?
我不想保留和支持watchOS 1,相反, 我想将现有的watchOS 1项目升级到watchOS 2,而无需重新创建Interface.Storyboard等.
Apple Doc并不是非常具体来解决这种情况:
这篇文章暗示我应该分别保留两个单独的目标,观看OS 1和watchOS 2(重做故事板等).
试图调整watchOS 1构建设置以遵循watchOS 2的模式,但遇到了很多错误,例如
"Deployment target equal to iOS 8.2 (was 9.0)",
Run Code Online (Sandbox Code Playgroud)
将部署目标设置为iOS 8.2将使程序能够在运行WatchOS 2的Watch上运行,但它保留并支持watchOS 1的代码功能,而不是watchOS 2.如果在Xcode 7中创建全新的watchOS 2目标,则部署目标对于WatchKit扩展和WatchKit应用程序是iOS 9.0,基础SDK是watchOS 2,与构建设置中的部署目标iOS 8.2和基础SDK watchOS 1相反.
该设置不支持WatchOS 2中的WKExtension和其他新库.评论者建议创建一个新的watchOS 2项目来解决这个问题.
运行环境:Xcode 7.0 beta,watchOS 2.在Apple Watch上安装watchOS 2,在iPhone上安装iOS 9.
......这是此迁移/转换/升级过程的预期模式吗?
版本1更新:重复的故事板并重新使用watchOS 1中的文件来进行新的watchOS 2项目并不难.您需要为watchOS 2应用程序创建至少一个临时配置文件和应用程序ID,可在模拟器上运行.该应用程序已正确安装在Apple Watch上,但无法通过在Xcode中运行调试设备方案来启动.Watch App可以手动启动(无需调试消息).这一发现与Github上的示例代码watchOS 2项目一致.
我在故事板中添加了一个WKInterfacePicker,并将其连接到接口控制器中的IBOutlet.在运行应用程序时,它在控制台中显示错误消息:
控制器的接口描述('watchPicker')中的未知属性
码:
@interface InterfaceController()
{
__unsafe_unretained IBOutlet WKInterfacePicker *watchPicker;
}
@end
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我已经在XCode 7 beta 5中导入了一个带有Watch目标的XCode 6项目,我收到以下消息:
WatchOS故事板不支持目标设备类型"iPhone"
我点击了故事板并将其从App目标中删除(仅改为监视应用目标).但它仍然无效.
关于如何让它工作的任何想法?
我正在版本7.0 beta 5上运行WatchOS 2.0。我正在通过iWatch App运行iOS。
如图所示,我设置了目标。
我的iOS的ViewController和WatchKitExtension的Interface Controller都已激活WCSession并被设置为委托。
if ([WCSession isSupported]) {
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
NSLog(@"iOS App WCSession is supported");
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试将userInfo从Watch发送到iOS:
NSDictionary *userInfo = [[NSDictionary alloc]initWithObjectsAndKeys:@"testingURL", @"outputURL", nil];
[[WCSession defaultSession] transferUserInfo:userInfo];
Run Code Online (Sandbox Code Playgroud)
但是我的ViewController的委托方法从来没有被调用过:
- (void)session:(WCSession *)session didReceiveUserInfo:(NSDictionary<NSString *,id> *)userInfo{
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Received userInfo Transferr");
NSLog(@"%@", userInfo);
[self.label setText:@"Received"];
});
}
Run Code Online (Sandbox Code Playgroud)
我从模拟器中同时运行Watch App和iOS,方法是按以下方案中的Run(运行):
谁能告诉我我做错了什么?
我有这个代码,用于响应强制触摸后点击的菜单项:
class InterfaceController: WKInterfaceController {
override init() {
super.init()
self.addMenuItemWithItemIcon(WKMenuItemIcon.Pause, title: "Pause", action: Selector("test"))
}
func test() {
print("test")
}
}
Run Code Online (Sandbox Code Playgroud)
当我强行触摸时,会出现菜单.当我点击"暂停"按钮时,test()不会被调用.
任何想法为什么会这样?
我发现了许多问题和许多答案,但没有最后的例子请求:
任何人都可以在Objective C中给出最后一个示例,将WCSession与IOS应用程序和带有多个ViewController的Watch应用程序(WatchOS2)一起使用的最佳做法是什么.
到目前为止我注意到的是以下事实:
1.)在AppDelegate的父(IOS)应用程序中激活WCSession:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Any other code you might have
if ([WCSession isSupported]) {
self.session = [WCSession defaultSession];
self.session.delegate = self;
[self.session activateSession];
}
}
Run Code Online (Sandbox Code Playgroud)
2.)在WatchOS2侧使用<WCSessionDelegate>.但其余的对我来说完全不清楚!一些答案是通过在传递的字典中指定键来讨论,如:
[session updateApplicationContext:@{@"viewController1": @"item1"} error:&error];
[session updateApplicationContext:@{@"viewController2": @"item2"} error:&error];
Run Code Online (Sandbox Code Playgroud)
其他人正在讨论检索默认会话
WCSession* session = [WCSession defaultSession];
[session updateApplicationContext:applicationDict error:nil];
Run Code Online (Sandbox Code Playgroud)
其他人在谈论不同的队列?"如果有必要,客户有责任派遣到另一个队列.发送回主要队列."
我完全糊涂了.因此,请举例说明如何将WCSession与IOS应用程序和带有多个ViewController的WatchOS2应用程序一起使用.
我需要它用于以下情况(简化):在我的父应用程序中,我测量心率,锻炼时间和卡路里.在Watch应用程序1. ViewController我将在2显示心率和锻炼时间.ViewController我也将显示心率和燃烧的卡路里.
我已经成功地在Apple Watch(WatchOS 2.1,iOS 9.2.1)中实现了原生语音识别(听写),基本上我使用了这个代码,带有一个空的"菜单选项数组":
func launchDictation(){
self.presentTextInputControllerWithSuggestions([], allowedInputMode: WKTextInputMode.Plain, completion:{
(results) -> Void in
let aResult = results?[0] as? String
if(!(aResult == nil)){
print(aResult)
print("SHORT ASR COMPLETED")
dispatch_async(dispatch_get_main_queue()) {
// Update UI
}
}//end if
})//end show voice menu
}
Run Code Online (Sandbox Code Playgroud)
因为它是......用户点击"说话按钮",然后弹出一个视图(显示用户说话时检测到的单词和一个漂亮的小音量图表).现在,用户必须说话,然后点击"完成"以完成语音识别.如果检测到短语但未点击"完成",则"听写失败"最终将出现在屏幕上.有人知道如何实现一些侦听器或委托,在用户停止讲话几秒后检测到听写过程结束时?
我试图使用watchOS 2在Apple Watch上渲染线条/步骤图.与iOS 9不同,watchOS 2不支持Quartz.它只支持Core Graphics.我尝试编写一些代码来绘制折线图但我得到一个错误"CGContextRestoreGState:无效的上下文0x0.这是一个严重的错误.这个应用程序,或它使用的库,正在使用无效的上下文,从而有助于整体系统稳定性和可靠性降低.这个通知是礼貌的:请解决这个问题.在即将到来的更新中它将成为一个致命错误."
以下是我使用的代码:
import WatchKit
import Foundation
import UIKit
class InterfaceController: WKInterfaceController{
override func awakeWithContext(context: AnyObject?) {
super.awakeWithContext(context)
let path = UIBezierPath()
let startPoint = CGPointMake(0.0, 0.0)
path.moveToPoint(startPoint)
let nextPoint = CGPointMake(20.0, 20.0)
path.addLineToPoint(nextPoint)
path.lineWidth = 1.0
UIColor.whiteColor().setStroke()
path.stroke()
}
override func willActivate() {
super.willActivate()
}
override func didDeactivate() {
super.didDeactivate()
}
}
Run Code Online (Sandbox Code Playgroud)
我的最终结果应该像Apple Watch上的Stocks app一样.每当用户点击特定股票时,他将能够查看/可视化该股票的统计数据.任何人都可以帮助我实现这一目标.
我有一个问题困扰了我几天,我找不到解决方案。我想要做的是在 Xcode 中归档一个 iOS 应用程序,包括一个 watchOS 应用程序。
正常的调试版本(iOS 应用程序和 WatchOS 应用程序)在真实设备和模拟器上运行良好(注意:包括 CocoaPods)。但是当我尝试归档项目时出现以下错误:
错误:/Users/username/Library/Developer/Xcode/DerivedData/Build/Intermediates/ArchiveIntermediates/AppName/BuildProductsPath/Release-watchos/AppNameWatch.app:没有这样的文件或目录
我试图清理所有内容,删除 DerivedData 文件夹,重新启动 Xcode,从设备中删除应用程序,重新启动 Mac ......但没有解决问题。我还尝试在没有 CocoaPods 集成的情况下进行存档(我从我的项目中完全删除了 CocoaPods)。我还尝试了目标构建阶段(删除嵌入的手表内容)。
也许有人有想法...
谢谢
史蒂芬
watchos-2 ×10
ios ×8
apple-watch ×4
watchkit ×4
swift ×3
objective-c ×2
xcode ×2
xcode7 ×2
archive ×1
iphone ×1
watchos ×1
xcode7-beta2 ×1