Apple Watch Series 4是对Apple Watch的绝佳修订。 有了更快的处理器和新的显示屏,Apple Watch最终感觉像是一个开发起来可能很有趣的平台。
在watchOS 5释放的所有新功能中,背景音频播放绝对是一个有趣的探索。 由于我自己没有运行音乐流媒体服务,因此我决定制作一个Spotify应用😉
- 企业家的播放列表— n°2
- Kano x Spotify –运动控制音乐
- 直播的乔治海峡表演达到14m; 豆瓣网是中国音乐流媒体之王
- 这就是您添加到Spotify精选播放列表中的方式。
- 3位拉丁裔艺术家que ya deberias estar escuchando(1era Parte)

Apollo的设计在很大程度上受到watchOS上Apple Music和Apple Music Radio应用程序的启发,在制作UI的过程中,存在许多有趣的挑战。 与第一方应用程序不同,第三方应用程序无权访问原始UIKit,所有接口都必须使用WatchKit完成。 就个人而言,我对WatchKit感到mixed贬不一。 一方面,布局引擎非常强大,因此开发人员可以专注于在视图外观上发挥创意,而不必花费大量时间来正确设置布局。 但是,另一方面,由于缺少对原始UIKit的访问权限,因此开发人员只能创建WatchKit允许的内容。 结果,大多数第三方应用看起来都很相似,并且没有太多自由可以在应用中创建个性。
watchOS上的Apple Music具有非常酷的封面流程设置,可以显示用户的播放列表。 watchOS 4中引入的新API使得在第三方应用程序中复制类似的体验成为可能。 该API(项目分页)允许用户使用带有半3D过渡的Digital Crown在多个界面控制器之间滚动,这对于显示播放列表艺术品而言看起来非常整洁。 在对此进行测试的过程中,我很惊讶触觉反馈对Digital Crown的巨大影响。 在Apple Watch Series 3(或之前的几代)上,这种体验感到完全不同(无聊)。 通过触觉反馈,滚动体验非常令人满意😉
要创建的另一个有趣的界面组件是“浏览”部分中的播放列表行。 由于Spotify在大多数播放列表作品中都包含播放列表名称,因此可以在不包含单独名称的情况下显示播放列表,从而使该应用在屏幕上显示更多内容。 这里的主要问题是WatchKit中缺少适用于Watch的第三方应用程序的UICollectionView等效组件。 为了做一些看起来不错的事情,我必须回退到使用WKInterfaceTable并创建一个包含两个项目的表行,并相应地填充它们。
watchOS上有多个提供音频播放功能的API。 在手表的早期推出时,它们中的大多数都很烂,并且设计有特定的局限性。 当Apple最终在watchOS上为第三方应用程序提供AVAudioSession (及其朋友如AVAudioPlayerNode )时,情况就好得多了。 借助watchOS 5,第三方应用程序现在可以利用AVAudioSession在后台播放音频,同时完全控制音频的播放方式。 这使第三方开发人员可以创建不会使最终用户感到沮丧的音频播放器。
随着Apple Watch在Series 3(及更高版本)上获得蜂窝连接性,以及Spotify广泛的动态播放列表集合,通过蜂窝提供音频流功能是我认为作为Spotify播放器真正重要的事情。
这就是开始变得棘手的地方,很多人说苹果不允许第三方应用程序提供流功能。 由于与AVAudioSession相关的API仅提供播放本地文件或原始PCM缓冲区的功能,因此iOS开发人员提供音频流的典型方法是使用AudioToolbox的 音频文件流服务 完成 。 该API允许开发人员输入数据并获取可提供给AVAudioPlayerNode播放的PCM缓冲区。 问题是AudioToolbox在watchOS上不可用,因此第三方开发人员无法像在iOS上那样轻松地在watchOS上进行音频转换。 我不认为watchOS上缺少AudioToolbox的(公共API)是Apple试图阻止开发人员在第三方应用程序中提供音频流的方法,但是,新API版本的投放速度并没有赶上旧的API删除。
由于我们无法从操作系统中免费获取音频流,因此为了从互联网上流传输音频,第三方应用程序必须捆绑自己的音频解码器。 Spotify提供了ogg格式,为此解码器实现的重量非常轻(非常好!)。 解码器准备就绪并且配置了管道之后,瞧,Apple Watch上的音频就如虎添翼!
在Spotify方面还有其他有趣的挑战,但这可能是在不同的时间发生的另一回事……
PS:如果您真的想在不带自己的解码器的情况下流式传输某些内容,则可以通过一些不可靠的方法使用公共API来实现,例如…使用将流式数据写入其中的临时文件创建一个AVAudioFile,然后将该音频文件传递给AVAudioPlayerNode …当它到达您尚未缓冲的位置时,会出现播放错误(或文件结尾),然后您可以重新计划另一个具有新位置偏移量的AVAudioFile,以便在缓冲更多内容后继续播放。 这实际上效果很好,我在Apple Watch的个人播客应用中使用了此方法。
尽管与几年前相比,watchOS的开发已经有了很多改进(例如,更多的API,更好的硬件),但在为watchOS开发应用程序时仍然遇到了很多挫败感。
首先? 调试watchOS应用仍然非常痛苦。 无线调试watchOS应用只是无法在一半时间内工作,而在另一半上,三分之二的时间都花在了等待该应用的安装上(感谢Swift🙃)……亲爱的库比蒂诺,并非每个人都有连接器手表的底部,我们无法使Xcode直接通过电线安装watchOS应用。
接下来的清单上,Apple确实需要重新审视他们在Apple Watch早期做出的许多决定。
例如,watchOS模拟器上的nsurlsessiond似乎包含人为的延迟,以模拟早期iOS设备和Apple Watch之间的缓慢传输。 但是,随着硬件变得越来越快,延迟似乎不会改变。 结果,在Simulator中测试网络请求的速度比在真实Apple Watch上测试的速度慢20倍,有效地使模拟器无法进行测试……
重访WatchKit也属于此类。 WatchKit仅在watchOS 1时代才有意义,因为Apple Watch上没有运行任何开发人员二进制文件。 但是,如今,它确实限制了开发人员在Apple Watch上可以执行的操作。
然后,有限的背景通道和哑巴并发症。 Apple Watch专为轻度交互而设计,但Apple不允许应用程序以更频繁的方式主动预加载内容。 当Apple Watch的电池不足以维持一天的时间时,这个决定可能是合情合理的,但是硬件发生了很大变化,现在电池可以持续更长的时间。 为第三方应用程序提供更多在后台预加载数据的机会,可以极大地改善第三方应用程序的Apple Watch体验。