我有一个 Apple Watch 应用程序,并且在模拟器(手表模拟器和 iPhone 模拟器)上运行得很好。当我在真实设备上运行该应用程序时,该WCSession watchAppInstalled属性为 false,但我在手表上有该应用程序,因此我无法从手表设备启动它。
我在 Apple Watch 本地化方面遇到问题:默认语言不起作用!
(..取消 XCode 10.0、Swift4.2、iOS12 和 WatchOS4.2)
在我的代码中,我将英语设置为默认语言。另外,我将德语定义为本地化。对于这两种语言,一切正常,并且根据 iPhone 设置的设置(即英语或德语),Apple Watch 会反映这些语言。
但如果我将 iPhone 语言设置为法语(并且区域也设置为法国),那么情况会变得很糟糕,然后手表上的所有内容都会以德语显示(而不是默认语言英语!!)。
这肯定是一个错误,并且对全世界的用户来说都非常烦人。
关于如何克服这个问题有什么想法吗?
请参阅此处的一些图片,说明 WatchKit 应用程序内部的本地化:
这里是 WatchKit 扩展:
以及 info.plist 条目:
我想开始使用 Core Data 和 SwiftUI,因此使用最新的 Xcode 11.1 GM 创建了一个新的 watchOS 项目。
然后,我从一个新的 iOS 项目(启用了 Core Data)中复制了persistentContainer& saveContext,以获得 Core Data 功能。
之后我修改了HostingController返回AnyView并在环境中设置变量。
class HostingController: WKHostingController<AnyView> {
override var body: AnyView {
let managedObjectContext = (WKExtension.shared().delegate as! ExtensionDelegate).persistentContainer.viewContext
return AnyView(ContentView().environment(\.managedObjectContext, managedObjectContext))
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以访问 内部的上下文ContentView,但不能访问其子视图中的上下文。
但这不是它的意图吗?据我所知,所有子视图都应该从其超级视图继承其环境,对吗?
现在,要在其子视图中访问它,我只需再次设置环境变量,如下所示:
NavigationLink(destination: ProjectsView().environment(\.managedObjectContext, managedObjectContext)) {
HStack {
Image(systemName: "folder.fill")
Text("Projects")
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我删除了 ContentView 中的 .environment() 参数,应用程序就会崩溃,因为没有加载上下文?!
错误信息是Context in environment is …
我刚刚看到它WKExtension.shared.EnableWaterLock现在已被弃用。我在我的锻炼应用程序中使用了这种方法来防止意外点击屏幕和结束锻炼等。它是否已被任何其他锁定屏幕的方法所取代?
我正在尝试使特定的界面控制器(在我的独立手表应用程序上)不会闲置。
我尝试过这个,但遇到了独立Watch App无法支持UIKit的问题。我一直在尝试寻找解决方法,但还没有找到任何东西。
这是我试图开始工作的代码:
UIApplication.shared.isIdleTimerDisabled = true
Run Code Online (Sandbox Code Playgroud) 我可以将Swift用于WatchKit吗?或者我必须使用目标C?
是否有任何关于watchOS 2新功能和API的良好链接?
我尝试了很少的API,但我想探索更多.
谢谢
watchkit ×8
apple-watch ×5
swift ×5
ios ×3
api ×1
localization ×1
objective-c ×1
swiftui ×1
watchos-2 ×1
watchos-5 ×1
watchos-6 ×1
waterlock ×1
wcsession ×1
xcode ×1