我有一个在模拟器中运行良好的WatchKit应用程序.但是当我尝试在实际设备上运行它时,它永远不会完成安装,并且从不提供任何错误消息或反馈.
iOS应用程序安装并运行正常.我在iPhone上调出Apple Watch应用程序并列出应用程序并显示正确的图标.选择此项,"在Apple Watch上显示应用程序"开关打开.它下面写着"安装......".它就在那里.
我还可以在Apple Watch上看到应用程序图标.选择它只是显示旋转滚轮指示器,就好像它正在尝试加载一样.
根据我在这里,Apple开发者论坛和网络上发现的其他建议我尝试过的事情:
验证所有应用包ID都正确且匹配.
已验证部署目标是iOS 8.2.
验证了WatchKit App在模拟器中运行.
已验证我的配置文件包含Apple Watch的UDID.
已验证我的Apple Watch在设备中显示为"配对监视".
从我的手机删除了应用程序,然后重新启动我的手机,手表和Macbook,然后重新安装.
以上都不是.有什么建议?
谢谢!
托马斯艾尔斯沃思
当模态呈现或推送接口控制器时,我们可以指定context参数以将一些数据传递给新控制器,如下所示.
// Push
[self pushControllerWithName:@"MyController" context:[NSDictionary dictionaryWithObjectsAndKeys:someObject, @"someKey", ..., nil]];
// Modal
[self presentControllerWithName:@"MyController" context:[NSDictionary dictionaryWithObjectsAndKeys:someObject, @"someKey", ..., nil]];
Run Code Online (Sandbox Code Playgroud)
我的问题是,我们怎么能这样做呢?
假设我们以模态方式呈现一个控制器,以便用户从列表中选择一个项目,然后我们返回主控制器,我们如何获取已被选中的项目?
Apple Watch的WatchKit中是否有ActivityIndicator(或类似的东西)?您如何向用户提供有关更持久的背景活动的反馈?
当我打开现有的Watchkit应用程序(Xcode 6.2)时,它会正确编译,启动模拟器(iPhone + Watch),然后是有意义的错误:
启动'xxx Watchkit Extension'SPErrorInValidBundleNoGizmoBinaryMessage时出错
所有模拟器都有这个问题(iPhone 5/5S/6/6 + - 38mm/42mm)
任何想法可以是什么问题?
由于某种原因,应用程序似乎不想在模拟器上运行,即使它曾经使用过.与其他Watchkit示例应用程序一样,同一项目中包含的iPhone应用程序也可以运行.
在对并发症进行了几天的处理之后,我有信心对于以规定间隔发生的更新的更新过程进行以下说明:
requestedUpdateDidBegin()
reloadTimelineForComplication 如果您需要重置所有数据.extendTimelineForComplication 如果您只需要在并发症时间轴的末尾添加新项目.requestedUpdateBudgetExhausted()而不是requestedUpdateDidBegin()如果您在当天花费了太多的并发症时间预算.这就是这个问题的原因.reloadTimelineForComplication,系统将调用getCurrentTimelineEntryForComplication(以及获取阵列的未来和过去变体,具体取决于您的时间旅行设置)extendTimelineForComplication说只会getTimelineEntriesForComplication(... afterDate date: NSDate ...)被调用.getNextRequestedUpdateDateWithHandler以便您指定复杂性需要新更新的时间.Apple的文档非常明确,您不应该经常询问更新,或者在复杂化代码中进行太多处理,否则您将耗尽时间预算,并且您的并发症将停止更新.所以,我的问题是:你在何时何地进行更新?
对于上下文,我的方案是一个URL,其返回数据每小时最多更改两次.
放置URL获取代码最明显的地方是func requestedUpdateDidBegin()获取数据,存储它,如果没有变化,只需返回.如果有更改,则延长或重新加载时间线.
但是,URL提取可能会很昂贵.备择方案:
WCSession,但如果用户关闭该应用程序,则更新将不再发生.还有其他地方吗?我可以在手表应用程序中使用不属于复杂功能的周期性功能吗?获取并发症更新数据的正确位置在哪里?
我正在尝试将数据从我的应用程序传递到Apple Watch应用程序中.基本上,我使用的方法与我用于创建今天小部件的方法相同,因此我通过NSUserDefaults传递数据.
问题是,当我运行我的应用程序时,数据不会像我预期的那样更新Watch应用程序中的标签.
这是我的......
override init(context: AnyObject?) {
// Initialize variables here.
super.init(context: context)
// Configure interface objects here.
NSLog("%@ init", self)
var defaults = NSUserDefaults(suiteName: "group.AffordIt")
var totalBudgetCalculation = ""
if (defaults!.stringForKey("totalBudgetWidget") != nil) {
println("Worked")
totalBudgetCalculation = defaults!.stringForKey("totalBudgetWidget")!
initialBudgetLabel.setText("Initial: \(totalBudgetCalculation)")
}
var currentBudgetCalculation = ""
if (defaults!.stringForKey("currentBudgetWidget") != nil) {
currentBudgetCalculation = defaults!.stringForKey("currentBudgetWidget")!
currentBudgetLabel.setText("Current: \(currentBudgetCalculation)")
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试将此代码放入其中willActivate(),但这似乎没有任何区别.
谁知道我哪里错了?
我尝试将一个接口控制器添加到故事板,将其Custom Class设置为WKInterfaceController子类,在模拟器中启动应用程序并导航到指定的接口控制器.
当我这样做时,我收到以下错误:
WatchKit错误 - 无法找到接口控制器类'TestController'来实例化
如果我尝试与控制器交互(例如尝试启动其按钮的操作),我会收到以下错误:
- ***********ERROR - [SPRemoteInterface _interfaceControllerClientIDForControllerID:] interfaceControllerID的clientIdentifier :( null)未找到
- ***********ERROR - [SPRemoteInterface _interfaceControllerClientIDForControllerID:] clientControllerID的clientIdentifier:找不到7120004
我尝试按照此答案的建议设置模块名称,但这仍然给我以下错误:
- WatchKit错误 - 无法找到接口控制器类'_TtC29myWatchApp_WatchKit_App19TestController'来实例化
- ***********ERROR - [SPRemoteInterface _interfaceControllerClientIDForControllerID:] interfaceControllerID的clientIdentifier :( null)未找到
- ***********ERROR - [SPRemoteInterface _interfaceControllerClientIDForControllerID:] interfaceControllerID的clientIdentifier:找不到6E20004
我使用WatchKit 1.0创建了一个iOS/Apple Watch应用程序,它使用共享组容器和自定义框架来访问同一个Core Data存储.现在,在watchOS 2.0的过渡指南中,Apple说:
如果您现有的Watch应用程序和iOS应用程序使用共享组容器或iCloud交换数据,则必须更改watchOS 2中交换数据的方式.由于WatchKit扩展现在可在Apple Watch上运行,因此扩展必须与iOS交换数据app无线.您可以使用NSURLSession对象或使用Watch Connectivity框架来执行此操作,该框架支持iOS应用程序和WatchKit扩展之间的双向通信.
但是,这如何与Core Data一起使用?我是否需要维护两个单独的存储,一个位于手表上的Documents文件夹中,另一个位于手机上,并使用Watch Connectivity框架同步更改?我看到watchOS 2.0可以访问Core Data框架(它位于可用技术列表中)......但是我不确定当商店位于手机上时它会有多大帮助.任何帮助/指导表示赞赏!
我正在使用 Xcode 12,但收到如下警告:
警告:在路径 '/Users/ABC/Library/Developer/Xcode/DerivedData/demowatchapp-blfzfuqxehfteaaofqpdlfuurtdr/Build/Products/Debug-watchsimulator/watchapp.app' 处创建 LLDB 目标时出错 - 使用空的 LLDB 目标会导致内存读取缓慢从远程设备。
我已经检查过 xcode 6 中有解决方案可以将架构更改为 arm64。我也在构建设置中检查了它,它被称为标准架构。我已经读过它,因为新的 xode 苹果本身使它成为标准架构,即 arm64、armv7。所以现在不确定是什么问题。我还检查了我的 iOS 应用程序、手表应用程序和扩展程序是否都具有相同的架构。
我还检查了以下对我不起作用的链接: Xcode - 创建 LLDB 目标时出错
我对Apple Watch引入的新用户交互可能性感到非常兴奋,其中包括Force Touch和Digital Crown.
但是,我在WatchKit API中找不到它们.有没有办法接收Force Touch/Digital Crown的活动?是否可以为事件提供自定义处理程序?