Swift 如何创建apple watchOS5?

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,但它没有描述如何布局我的复杂性。有些部分似乎缺少链接 我可以只提供一种复杂类型(大型水

我从未在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)")
}