代码之家  ›  专栏  ›  技术社区  ›  Alex Stone

如何创建apple watchOS5?

  •  0
  • Alex Stone  · 技术社区  · 6 年前

    我从来没有在WatchOS5工作过,我想为AppleWatch开发一个水平复杂度(模块化大型),比如“心率”。我的想法是用另一种方式显示心率数据。现在我想在开发观察中部署这个复杂问题。

    我已经创建了一个新的项目,并添加了一个“复杂度”复选框。我看到这添加了一个带有时间轴配置占位符的控制器。

    this 苹果医生,但它没有描述如何布局我的复杂。某些部分似乎缺少链接。

    • 我能提供一种复杂的风格(大水平-模块化大)
    • 我是否需要提供任何iPhone应用程序内容以外的管理 复杂的逻辑,或者我可以离开没有一个视图控制器?

    抱歉,对于一个完整的初学者项目,我还没有看到一个项目专门关注水平复杂的手表操作系统5

    2 回复  |  直到 6 年前
        1
  •  3
  •   ARMatt    6 年前

    您应该能够立即部署它,尽管它不会做任何事情。看一看wwdc视频,解释如何创建一个复杂的问题: video

    你不能自己布置复杂的内容,你可以从一组你用数据填充的模板中选择。你看到的屏幕是你的手表应用程序,而不是复杂的。

    复杂的逻辑是你的WatchKit扩展的一部分,所以从技术上来说你不需要iOS伴侣应用程序中的任何东西,我不知道你需要提供多少功能才能通过应用程序审查。

    将图形添加到资源目录不会起任何作用,您必须在配置模板时引用它们。

        2
  •  2
  •   Alex Stone    5 年前

    这里有一个 example by Apple of how to communicate with the apple watch app . 您需要仔细阅读自述文件25次,才能更改该项目中的所有应用程序组标识符。

    • 您的主要手机应用资产对watch应用不可见
    • 您的手表序列图像板资产进入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)")
    }