Swift 如何创建apple watchOS5?
我从未在WatchOS5工作过,我想为AppleWatch开发一个水平复杂度(模块化大),比如“心率”。我的想法是用不同的方式显示心率数据。现在,我想在开发观察上部署这个复杂问题 我已经创建了一个新项目,添加了一个“复杂度”复选框。我看到这添加了一个带有时间线配置占位符的控制器 还有一个故事板,上面有一堆空屏幕。我不确定在部署apple watch应用程序之前,我需要投入多少精力。我看到了Apple doc,但它没有描述如何布局我的复杂性。有些部分似乎缺少链接Swift 如何创建apple watchOS5?,swift,apple-watch,apple-watch-complication,watchos-5,Swift,Apple Watch,Apple Watch Complication,Watchos 5,我从未在WatchOS5工作过,我想为AppleWatch开发一个水平复杂度(模块化大),比如“心率”。我的想法是用不同的方式显示心率数据。现在,我想在开发观察上部署这个复杂问题 我已经创建了一个新项目,添加了一个“复杂度”复选框。我看到这添加了一个带有时间线配置占位符的控制器 还有一个故事板,上面有一堆空屏幕。我不确定在部署apple watch应用程序之前,我需要投入多少精力。我看到了Apple doc,但它没有描述如何布局我的复杂性。有些部分似乎缺少链接 我可以只提供一种复杂类型(大型水
- 我可以只提供一种复杂类型(大型水平-模块化大型)
- 除了管理应用程序外,我还需要提供任何iPhone应用程序内容吗 复杂的逻辑,或者我可以在没有视图控制器的情况下离开吗
- 我是否通过向assets文件夹中添加一些内容(它有一堆图形槽)来控制复杂的外观
很抱歉,对于一个完整的初学者项目,我还没有看到一个项目专门关注watch OS 5的水平复杂性,您应该能够立即部署它,尽管它不会做任何事情。请看wwdc视频,其中解释了如何创建复杂度: 您不能自己布局复杂的内容,您可以从一组用数据填充的模板中进行选择。你看到的屏幕是你的手表应用程序,而不是复杂的 您不必支持所有复杂的样式 复杂的逻辑是WatchKit扩展的一部分,因此从技术上讲,iOS companion应用程序中不需要任何东西,但我不确定你必须提供多少功能才能通过应用程序审查 将图形添加到资源目录不会起任何作用,您必须在配置模板时引用它们。以下是一个示例。您需要仔细阅读自述25次,才能在该项目中更改所有应用程序组标识符
- 手表应用程序看不到您的主要手机应用程序资产
- 您的手表情节串连板资产进入WatchKit目标
- 通过编程访问的资产进入监视扩展目标
- 我可以只提供一种类型的并发症(大水平)吗- 模块化大)是
- 我需要提供iPhone应用程序以外的任何内容吗 管理复杂的逻辑,或者我可以不需要一个 视图控制器是-手表应用程序有计算限制
- 我是否通过以下方式控制并发症的出现 向资产文件夹添加内容(它有一组图形 插槽)请参见下文-它既是资产文件夹又是占位符
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)")
}
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)")
}