我从没在WatchOS5中工作过,想为AppleWatch开发水平并发症(模块化大),例如“ Heart Rate”。我的想法是,我将以其他方式显示心率数据。现在,我想将复杂性部署在开发监视上。
我创建了一个新项目,其中添加了用于“并发症”的复选框。我看到这增加了带有时间轴配置占位符的并发症控制器。
还有一个故事板,其中有一堆空屏幕。我不确定在部署Apple Watch应用程序之前需要付出多少努力。我看到了this Apple文档,但没有描述如何布置并发症。某些部分似乎缺少链接。
对不起,对于一个完整的初学者项目,我还没有看到一个专门针对watch OS 5的水平并发症的项目
答案 0 :(得分:2)
您应该能够立即部署它,尽管它不会做任何事情。观看wwdc视频,其中介绍了如何创建并发症:video
您无法自行布置并发症,可以从填充数据的一组模板中进行选择。您所看到的屏幕是您的手表应用程序,而不是复杂的屏幕。
您不必支持所有复杂样式。
复杂度逻辑是WatchKit扩展的一部分,因此从技术上讲,您无需在iOS配套应用中使用任何工具,但是我不确定要通过应用审查需要提供多少功能。
将图形添加到资产目录不会执行任何操作,在配置模板时必须引用它们。
答案 1 :(得分:1)
这里是example by Apple of how to communicate with the apple watch app。您需要认真阅读自述文件约25次,以使该项目中的所有应用程序组标识符都更改。
原始答案:
修改上面的示例以创建在手表上显示的占位符图像(当您在修改屏幕布局时选择复杂功能时)
func getPlaceholderTemplate(for complication: CLKComplication, withHandler handler: @escaping (CLKComplicationTemplate?) -> Void) {
// Pass the template to ClockKit.
if complication.family == .graphicRectangular {
// Display a random number string on the body.
let template = CLKComplicationTemplateGraphicRectangularLargeImage()
template.textProvider = CLKSimpleTextProvider(text: "---")
let image = UIImage(named: "imageFromWatchExtensionAssets") ?? UIImage()
template.imageProvider = CLKFullColorImageProvider(fullColorImage: image)
// Pass the entry to ClockKit.
handler(template)
}else {
handler(nil);
return
}
}
将小包发送到手表(不会发送图像!)
func updateHeartRate(with sample: HKQuantitySample){
let context: [String: Any] = ["title": "String from phone"]
do {
try WCSession.default.updateApplicationContext(context)
} catch {
print("Failed to transmit app context")
}
}
传输图像和文件:
func uploadImage(_ image: UIImage, name: String, title: String = "") {
let data: Data? = UIImagePNGRepresentation(image)
do {
let fileManager = FileManager.default
let documentDirectory = try fileManager.url(for: .cachesDirectory,
in: .userDomainMask,
appropriateFor:nil,
create:true)
let fileURL = try FileManager.fileURL("\(name).png")
if fileManager.fileExists(atPath: fileURL.path) {
try fileManager.removeItem(at: fileURL)
try data?.write(to: fileURL, options: Data.WritingOptions.atomic)
} else {
try data?.write(to: fileURL, options: Data.WritingOptions.atomic)
}
if WCSession.default.activationState != .activated {
print("session not activated")
}
fileTransfer = WCSession.default.transferFile(fileURL, metadata: ["name":name, "title": title])
}
catch {
print(error)
}
print("Completed transfer \(name)")
}