这是Apple 如何与 Apple Watch 应用程序通信的示例。您需要仔细阅读自述文件大约 25 次才能更改该项目中的所有应用程序组标识符。
- 您的主要手机应用资产对手表应用不可见
- 您的手表故事板资产进入 WatchKit 目标
- 您以编程方式访问的资产进入监视扩展目标
原始答案:
- 我可以只提供一种复杂功能吗(大型水平 - 模块化大型) -是的
- 除了管理复杂逻辑之外,我是否需要提供任何 iPhone 应用程序内容,或者我可以在没有视图控制器的情况下逃脱吗?是 - 手表应用程序有计算限制
- 我是否可以通过向资产文件夹添加一些东西(它有一堆图形插槽)来控制我的并发症的外观?见下文 - 它既是资产文件夹又是占位符
修改上面的示例,创建一个显示在手表上的占位符图像(当您在修改屏幕布局时选择并发症时)
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)")
}