如今,移动开发在每家科技公司的产品策略中都变得轻而易举。 从约会到理财再到健身,一切都通过我们的移动设备完成。 事实上,最近的数据显示,尽管过去5年整体互联网使用量增长了75%,但移动使用量却增长了600%(Kleiner Perkins Caufield&Byers 2015年互联网趋势报告)。 对移动交互的所有这些强调对于希望在移动开发中发展事业的工程师来说是一件好事。 通过参加Grace Hopper Celebration 2016上的这些讲座和会议,紧跟这一发展趋势,并学习移动和可穿戴开发的最佳实践。并且,获得有关本年度移动社区聚会的一些内部信息: GHC16上的移动优先,可穿戴设备等 星期四 威胁建模“智能”手表-每个智能手表用户应了解的七件事,思科系统公司杰出工程师Michele Guel 大规模移动:构建持久架构面板,包括: Ayaka Nonaka,iOS工程师,工作流程 Kristina Thai,Intuit的iOS软件工程师 Facebook工程经理Jenny Yuen Facebook流动工程师Kasia Hayden 卢雯(Wendy Lu),Pinterest软件工程师 数字未来:消除物联网和可穿戴设备的炒作小组,其中包括: Siji Tom,高级工程师— Apple Watch,Apple 高通物联网智能城市副总裁Kiva Allgood Meta工业设计工程师Esther Lekeu 宝洁公司IoT美容主管Melissa Kreuzer 埃森哲高级研发总监Sunny Webb 安全日志不够用:事件日志记录着用户的隐私 Lyft安全与隐私技术项目经理Alisha Kloc (不是移动专用主题,而是移动工程师必须了解的重要主题。) GHC1 Paypal:可穿戴银行业务:当技术真正使生活更轻松时 ,Paypal的Carmen Ramirez FireEye员工研究科学家谢静(Jing Xie) 星期五 大家好! 建立您的第一个Apple Watch App研讨会,由以下人员领导: Patreon […]
Apple Watch,健身应用程序,屏幕上的当前心率(bpm)。 简单的任务。 还是? Tl; dr :完整示例。 首先,必须创建一个观察者,因此每当HealthKit的心率数据发生变化时,都会收到更新。 创建心率的样本类型后,可以使用HKObserverQuery完成此操作。 奇怪的是-至少对我来说-这实际上并没有告诉您心率。 必须执行另一个查询才能检索最新的可用值。 该查询需要一个样本类型,谓词来定义日期间隔并进行排序以获取最新的日期间隔。 我使用了完成闭包,因此我们可以返回获取的值。 而且我们还没有完成…返回的数据无法显示,必须使用“计数/分钟”的HKUnit进行转换。 在此处查看完整示例。 我的意思是,它确实有效,但是单个数字就是80多行代码。
2天前,我已将申请提交给Apple的WWDC 2016学生奖学金。 似乎每年我真的很想这样做,但是今年我终于做到了。 即使我没有赢球,这也感觉像是巨大的成就。 自从在2014年WWDC上发布《 Swift编程语言》一书以来,我就一直在学习Swift,但是我一直在努力学习Cocoa框架,因为那里有很多东西需要学习。 最近,我在业余时间对Web项目进行工作变得有些无聊。 可能是因为我现在是按职业划分的Web开发人员,或者也许我只是对该平台感到厌倦。 但是,无论哪种方式,我都认为在学习iOS开发方面取得成功的最好方法是仅构建一个应用程序并填补我的空白。 这将我们带到名为Z Split的应用程序中。 Z分割 我从一月份开始这个项目,甚至在考虑可以将其提交奖学金之前。 这是WSplit,Llainfair和LiveSplit的计时器。 那里有很多分割计时器,但在iOS或OS X上没有真正的分割计时器。这是我想填补的空白。 我想制作一个优雅的分割计时器,并利用平台的本机API和特定功能。 我使用了Autolayout,Core Data,3D Touch,Watch Kit,UIKeyCommand等技术。 我和父亲一起设计了该应用程序。 我们决定为应用程序选择一个黑暗的主题。 我通常喜欢在应用中使用深色主题(其中一个是Tweetbot)。 轻量级版本肯定会在将来的某个时候问世。 iOS 10即将推出全系统黑暗模式! 3月,我参加了尝试! 东京的Swift会议。 那里有很多很棒的演讲者,我在那里学到了很多很棒的技巧。 其中之一:Swift中的协议/扩展确实很棒! 我在代码中使用了协议来简化两件事:自定义UITableViewCells上的渐变和简单的CoreData表。 他们使我节省了重复的代码并精简了我的View Controller,以使它们不会变得无所不包。 开发应用程序中最难的部分之一可能是让Core Data正常运行以使所有内容正常运行。 这是一个非常不错的框架,但是对于像我这样的新手来说,学习曲线相当高。 持久性系统需要管理很多棘手的“陷阱”。 例如,有一次我的应用需要花费几秒钟来加载每个视图,因为从核心数据存储加载拆分/路由图像会阻塞UI线程。 而且我什至还没有进入后台线程管理的更高级的功能。 开发Apple Watch扩展应用程序也很有趣。 我想让它尽可能简单,因为老实说,由于手表上第三方应用程序的加载时间,您实际上只能拿起手机。 当前,它只是用作运行状态的快速状态指示器,您可以通过强制触摸菜单执行诸如拆分,暂停等操作。 将来,我可能会考虑向手表应用程序添加更多独立功能。 但就目前而言,我认为它运行良好(只要您的手机在附近)。 这可能不是最好的活动指示器,因为它包括库提交(我使用了1个cocoapod,RSKImageCropper)和情节提要,这些情节提要增加/删除行。 但这给出了我随着时间的推移在该项目中活动的总体思路。 即使这个项目不是在宣布奖学金后才构思的,但过去的两周绝对是一次按时完成任务的大型补习班。 未来发展 我计划继续开发Z Split,并在未来几周内将其提交给App Store。 我想补充很多功能,在整个奖学金期间,我基本上只能达到最低要求的功能集。 我要添加的其他功能包括: […]
我决定写这篇关于如何构建watchOS应用程序来解决一个小问题的快速文章。 这里有一个随附的Stack Overflow帖子。 当我从隔夜充电的Series 0 Apple Watch升级到Series 3时,我切换到了更零星的充电时间表。 由于Series 3在一天结束时不会像原来的Apple Watch一样耗尽电池电量,因此我开始过夜佩戴它来跟踪睡眠。 然后,我会每天将其扔到充电器上一次或两次,以保持良好的充电效果。 随机充电足以使它在大多数时间都能正常运行,但有时我会把它留在充电器上而忘了。 有时候在我上床睡觉时会发生这种情况,所以我会入睡,错过了睡眠追踪。 2018年8月,我获得了Oura戒指以追踪我的睡眠。 它通过蓝牙连接到iPhone。 充满电且在有效范围内时,本地通知会到达iPhone: 我喜欢此功能,因此我想尝试将其复制到Apple Watch。 想法是在iOS应用中设置阈值(例如80%),并在配对手表的电池电量达到该水平时在iPhone上收到通知。 可能的解决方案#1 iOS上已经有“今日”小部件,可以显示配对的Apple Watch的电池电量,因此似乎已经有些频繁地将数据发送到iPhone: 这让我认为我可以构建一个简单的iOS应用程序,该应用程序要么观察此电池百分比值,要么使用后台任务定期检查该值,并基于对该值的更改发送通知。 在WatchKit中,有WKInterfaceDevice对象,可在iOS和watchOS上使用,其中包含有关已配对手表的信息。 虽然可以使用WKInterfaceDevice.current().batteryLevel在watchOS应用上获取充电百分比,但该属性在iOS端不可用。 看来Today小部件必须使用私有API才能读取配对手表的电池电量。 可能的解决方案2 我探索的下一条途径是让手表定期将其充电百分比发送到配对的iPhone。 我的计划是在watchOS应用程序中安排后台刷新任务( WKApplicationRefreshBackgroundTask ),以使用WatchConnectivity定期将消息发送到watchOS应用程序。 在佩戴Apple Watch时,这些任务似乎每小时至少运行约一次。 手表会将当前的电池电量发送到配对的iPhone,如果电量超过阈值,则会立即向用户显示本地通知。 在许多情况下,当iOS应用使用sendMessage从手表接收消息时,它将在后台启动,而当使用transferUserInfo则不会。 根据我的测试,这些WatchConnectivity消息将通过Internet而不是仅通过蓝牙发送,因此从理论上讲,当手表的充电超出蓝牙范围时,这也将起作用。 在这一点上,电池电量转移到通知部分是非常可靠的,但是后台任务被调用的频率却不是。 通过添加并发症,可以使手表更频繁地报告其百分比。 这可能会导致watchOS更加频繁地为应用程序后台任务分配时间,例如每15分钟左右一次,但这可能会浪费复杂的空间,除非将其用作系统电池电量消耗的替代品。 官方的并发症可能会更频繁地更新,因为它是操作系统的一部分。 不过,所有这些都不相关。 在充电器上时,这些后台刷新任务似乎完全暂停了。 这意味着当手表在充电器上达到或超过指定水平时,此消息传递解决方案无法将通知发送到iPhone。 佩戴手表时的电池电量通知对于管理电量仍然很有用,因为可以设置比系统的10%通知更高的阈值,并在手表电池电量不足时发出警报。 至少在电量很低之前,这至少可以让人们更加警惕,但是并不能解决最初的问题,即不主动检查“今日”小部件或手表本身而知道何时将Apple Watch充电到一定水平。 因此,这个想法现在几乎是死胡同。 我认为这有几种可能的路径: 苹果内置本机电量级别通知(似乎不太可能) Apple更改了WatchKit,以使必要的变量可以在iOS中访问(也许,但是除了我的通知提示,我无法想到其他用于该目的的其他应用程序) 如果后者发生了,也许我会重新考虑一下这个想法。 如果您还有其他解决方案,请在此处查看Stack Overflow帖子。 可能的解决方案#3 […]
你要学什么? 使用WKInterfaceTable和管理为Apple Watch制作一个小界面 IBActions-第一部分 使用sendMessage(_:replyHandler:errorHandler 🙂从Apple Watch向iPhone应用程序请求信息—第2部分 从iPhone向Apple Watch发送信息sendMessage(_:replyHandler ) —第3部分 重构我们的代码, 以便在一处管理WCSession 。 —第4部分 使用updateApplicationContext(_ 🙂更新应用程序—第5部分 首先,我们需要一些关于可能性和可能性交流场景的理论: —关于与对方应用进行通信 您可以通过以下任意一种方式启动传输和通信: 🎓Apple 官方文件 –使用updateApplicationContext(_:)方法将最新状态信息传达给对方。 当对方唤醒时,它可以使用此信息来更新其自身的状态。 例如,支持后台应用刷新的iOS应用可以使用其后台执行时间的一部分来更新相应的Watch应用。 此方法将覆盖以前的数据字典,因此当您的应用程序仅需要最新的数据值时,请使用此方法。 –使用sendMessage(_:replyHandler:errorHandler:)或sendMessageData(_:replyHandler:errorHandler:)方法将数据传输到可访问的对应对象。 这些方法用于在iOS应用和WatchKit扩展之间进行即时通信。 当前, isReachable属性必须为true才能使这些方法成功。 –使用transferUserInfo(_:)方法在后台传输数据字典。 您发送的字典排队等待传递给对方,并且在当前应用被暂停或终止时,传输继续进行。 –使用transferFile(_:metadata:)方法在后台传输文件。 如果您要发送的不只是值字典,请使用此方法。 例如,使用此方法发送图像或基于文件的文档。 –在iOS中,使用transferCurrentComplicationUserInfo(_:)方法发送与Watch应用程序并发症有关的数据。 使用此方法会影响并发症的时间预算。 —好吧,现在您知道苹果在两个平台之间进行通信提供了不同的可能性,我们可以开始开发一系列有关如何使用其中最重要的一些教程– 建立新专案 我们将创建一个新项目,为“ 带有WatchKit App的iOS App ”选择模板,并继续执行基本步骤来创建它。 苹果手表界面 现在,我们将为由WKInterfaceTable和WKInterfaceButton组成的Apple Watch创建一个小界面,一个界面紧挨另一个。 接下来,在Table内部,我们将插入WKInterfaceLabel并将其行数设置为0。 表类和标识符 转到界面生成器上的TableRowController项,并将其放入类名,在我的情况下为Row并作为标识符设置相同的名称。 应该与下一张图片具有相同的外观 界面构建器连接 现在,将表从Interface Builder中连接到InterfaceController中的代码,并且还连接按钮的IBAction 。 […]
非官方watchOS通过教程更新主页 p。 80个 watchOS具有超过19个控件。 请参阅第3章。 入门 由于watchOS开发的基础已经稳定,因此本章中的代码很少需要更改。 但是,让我趁此机会做个旁注,因为它与v3.01示例代码略有不同。 是的,我缩进了四个空格🙂 旁注我习惯使用以下方式标记代码: // MARK:-[description] 我是从Udacity iOS开发人员纳米学位的导师那里学到的。 连字符很重要; 您会在轮廓中得到漂亮的分隔线。 这是不带连字符的结果: 这是带有连字符的MARK: 计时器对象 定时器接线 使用标签和按钮控制重量 p。 92我将最小和最大重量值实现为MeatTemperature.swift中的 static let常数。 在查看下面的我的实现之前,请尝试自己做。 我在MeatTemperature.swift中添加了以下内容: 结构常数{ 结构重量{ 静态让minOunces = 1 静态让maxOunces = 32 } } (最大32值不一定是您在生产应用中想要的,因为用户可能会希望烹饪更多的肉,但是选择该值以匹配第5章中的文字) 然后我将其添加到updateConfiguration()的顶部 如果盎司<Constants.Weight.minOunces { 盎司= Constants.Weight.minOunces }否则,如果盎司> Constants.Weight.maxOunces { 盎司= Constants.Weight.maxOunces } 使用滑块对象控制完成 集成计时器 与滚动互动 使用开关更改单位 p。 98我在MeatTemperature.swift中添加了两个新常量 […]
两个月前,我被迫从TV Show Tracker中删除了同伴观看应用程序。 Apple App Store提交的新要求于2018年4月1日生效:watch app提交必须使用watchOS 2及更高版本构建。 最初,我计划在接下来的几周内将该应用程序移植到watchOS 4。 在端口中前进,我已经意识到,为了最终确定端口,将需要重写大量代码。 考虑到这一点,我决定将手表应用的重新发布推迟到下一个主要版本的TV Show Tracker 4.0 for iOS推出,该版本将在未来几个月内推出(有关更多信息,请参见下文)。 Watch应用已于2015年4月与Apple Watch一起发布。它是通过watchOS 1.0 SDK开发的,该技术在技术上类似于为iOS开发Notification Center Widget。 在watchOS 1下,所有代码逻辑都在iPhone上运行,所有数据也存储在iPhone上。 这意味着开发要比为新操作系统开发全新的应用程序容易得多,这有两个原因: 由于WatchKit扩展程序在iOS上运行,因此大多数代码库都可以与iOS共享。 数据(即收藏节目列表,首选项,缓存的剧集信息)可以轻松地在Watch和iPhone应用程序之间共享和同步,因为它们实际上存储在同一设备上。 话虽这么说,移植到watchOS 2+意味着重写了大量与watchOS / iOS相互兼容的代码,以及用于在iPhone应用程序和手表对等之间共享和同步数据的新代码。 TV Show Tracker 3.0是在iOS 7之后不久发布的,已经有5年历史了。 3.0版是一个重大改头换面,但不是一个完整的重写,并且与2009年11月在iOS 3下发布的1.0版共享了很多代码库。 当出现错误时,这种非常古老的代码库变得很难维护,发展和修复。 这就是为什么我开始研究1.0以来最大版本的原因:TV Show Tracker 4.0,完全重写了应用程序🚀🚀🚀。 这个主要版本比以往任何时候都更加稳定,集成了新iPhone和iPad的最新功能,并将与每年添加到iOS的所有新功能保持同步。 近十年来,我收到无数关于快乐用户使用TST的电子邮件,这就是促使我保持该应用程序持续发展并不断改善的原因。 再次感谢您的支持! 我知道我在尝试响应和支持遇到问题并崩溃的每个用户时遇到了困难,对此我感到非常抱歉。 这是我现在从头开始开发一个全新应用程序的主要原因之一。 跟随@tvshowtracker是获取有关即将发布的版本的最新消息的最佳方法。 敬请关注!
非官方watchOS通过教程更新主页 入门 代码杀手 选择器显示样式 p。 106 Series 4手表默认启用了触觉反馈。 我不会添加将其禁用到项目的代码,因为默认行为很棒。 但这是一个示例: 覆盖func awake(withContext context:Any?){ super.awake(withContext:context) self.crownSequencer.isHapticFeedbackEnabled = false } 有关更多详细信息,请参阅Apple的WKCrownSequencer文档。 清单样式 堆叠式 序列样式 您的第一个选择器 p。 109这是我的代码编辑版本。 我避免魔术数字。 覆盖func awake(withContext context:Any?){ super.awake(withContext:上下文) // 1 var weightItems:[WKPickerItem] = [] 为我在Constants.Weight.minOunces … Constants.Weight.maxOunces中 { // 2 让item = WKPickerItem() item.title =字符串(i) weightItems.append(item) } // 3 weightPicker.setItems(weightItems) // 4 weightPicker.setSelectedItemIndex(盎司-1) […]
非官方watchOS通过教程更新主页 探索手表 操作系统 相互作用 p。 62 Series 4 Apple Watch的数字表冠具有触觉反馈 ,可提供更直观的用户体验。 有关如何禁用它的信息,请参见第5章:选择器-选择器显示样式和第7章:表-入门。 手表展示 p。 63 Apple Watch Series 4具有两个新的显示屏尺寸:40和44 mm。 要了解有关它们的所有信息,请观看“ Designing for Apple Watch Series 4”技术讲座和/或阅读文章“支持多种屏幕尺寸”。 3系列42毫米和40毫米系列的手表尺寸相似。 要定位所有四个尺寸,请定位40/42毫米,并确保显示屏缩小至38毫米和最大44毫米。 Series 4手表的边缘呈圆形,因此watchOS 5提供了内容安全区域插图和最小的布局边距 ,类似于iPhone X系列的安全区域 。 使用“ 固定到屏幕边缘”属性可以使用全屏。 Watch OS现在可以使用可缩放的PDF资源。 2x PDF资源将在以下4种屏幕尺寸中缩放: 介绍WatchKit 这是什么 那不是什么 WatchKit应用 由于现在有4种不同尺寸的手表可供选择,因此Apple彻底改造了watchOS图标集 。 这是新清单。 请注意,所有图标都是正方形 ,因此40px x 40px我将简单地写为40px 。 对于Sketch和Photoshop模板,请查看Apple设计资源。 苹果手表通知中心 […]
raywenderlich.com在2018年8月20日报道说,他们的watchOS by Tutorials和tvOS Apprentice书籍将不会更新,因为“我们的客户需求不足,无法保证对这些书籍进行进一步的投资。” Tutorials的2D Apple Games和Tutorials的3D Apple Games也不会更新,“因为如今大多数游戏开发人员都喜欢使用Unity或Unreal Engine等现代游戏引擎。”但是SpriteKit和SceneKit是唯一可用于watchOS… 虽然我可以理解这个商业决策,但watchOS by Tutorials是我最喜欢的资源,用于学习如何制作watchOS应用。 而且Apple Watch不会随处可见。 Series 4 Watch和watchOS 5包含激动人心的新功能,并且Series 3已经是我所依赖的成熟产品,因此我相信这个社区只会不断增长。 我倾向于同意Business Insider的文章。很明显,苹果的未来就是Apple Watch。 关键报价: 就苹果公司的技术野心而言,很明显,Apple Watch就是它的发源地。 苹果公司在微型化,材料,新型传感器,新型体验和新型客户方面取得了最大的进步。 有什么用? 它不仅是出色的健身追踪器。 这是我手机的远程控制和通知中心,因此只需轻轻一按,我就能做很多事情,而不必从口袋里掏出iPhone了。 raywenderlich.com发行的Tutorials的watchOS的最新版本为watchOS 4,Swift 4和Xcode 9的v3.01。我逐章发布了watchOS 5,Swift 4.2和Xcode 10的更新指南。以及包含所有项目的开始和结束版本的代码存储库。 我还将写教程来介绍新的watchOS 5功能。 我也已经开始通过教程更新页面进行非官方2D苹果游戏和通过教程更新页面进行非官方3D苹果游戏。 我已经获得Ray的许可。 代码存储库为:https://github.com/christophomos/watchOS_by_Tutorials_update 目录 介绍 您好,Apple Watch! 设计出色的手表应用 建筑 UI控件 选择器 布局 桌子 导航 数字王冠与手势 快照API […]