6.为什么要写一个macOS
应用程序?¶
在前面五章中,你已经创建了一个真正的、原生的macOS
应用程序。它的外观和行为都像一个标准的Mac
应用程序,并且遵循所有的苹果准则。
但很多Mac
应用程序不是这样构建的。
在本章中,你将了解Mac应用程序的特点,并考虑一些构建应用程序的替代方法。你将评估每种方法的优势和劣势。
在这一章中,你不会构建任何东西,如果你喜欢继续编码,请跳过它。但它会帮助你了解为什么编写一个原生的Mac
应用程序是个好主意。
什么是Mac
应用程序?¶
在2021
年WWDC
大会上,苹果工程师做了两个关于Mac
上SwiftUI
的代码演示。他们首先列出了优秀Mac
应用的四个关键原则。
Flexible
是因为我们与Mac
的不同互动方式:键盘、轨迹垫、鼠标和控制器。另外,Mac
应用程序提供了很多定制功能。看看Finder
,它有不同的视图模式,以及你可以显示或隐藏的窗口的不同部分。Mac
应用程序适应所有这些个人偏好。
Familiar
是因为Mac
应用程序都遵循类似的设计模式。菜单应该总是包含预期的项目。当一个窗口有特定的导航、内容、细节、控制等区域,并位于预期的位置时,应用程序会更容易使用。
Expansive
,允许许多不同的屏幕尺寸和窗口大小。你的应用程序必须在很小的MacBook Air
上的小窗口中工作,在36
英寸的显示器上全屏显示,或者在多个显示器上分布多个窗口。它可以通过提供用户可以关闭和打开的可选视图,以及以适应视图大小的方式显示内容来做到这一点。
因为有大窗口和控制方法,所以Precise
。小鼠和跟踪垫的精确度惊人,与手指不同。因此,控制可以更小,更密集。
考虑一下这些原则中的每一条,以及On This Day
是如何符合每一条的。
替代品有哪些?¶
编写可以在Mac
上运行的应用程序有许多不同的选择,所以请看一下主要的选择,并评估它们是否遵循这些关键原则。
iOS
应用程序¶
Apple Silicon Macs
可以直接运行几乎所有的iOS
应用程序。举个例子,我在Mac App Store
搜索calculator
,但选择了iPhone & iPad Apps
:
我下载了一个名为Calculator - Free Calculator
的免费应用程序,它说是为iPad
设计的。当我运行它时,我看到一个简单的巨大的窗口,有巨大的控制,底部有一个广告,并立即要求给应用程序蓝牙访问。为什么任何计算器都需要这个,我不清楚。
我把它缩小了截图,但在我的iMac
上窗口是1800 x 2382
:
首选项很有意思,特别是Touch Alternatives
部分。这些设置是自动生成的:
关键原则:
- 灵活 - 没有
- 熟悉 - 不, 对Mac用户来说不熟悉。
- 扩张性 - 不
- 精确 - 没有
总分:0 / 4
你应该把它作为让你的应用程序在Mac
上使用的一种方式吗?不。
这是一个巧妙的技巧,但是为iPhone
设计的应用程序不可能在Mac
屏幕上看起来不错。
如果你有一个iOS
应用,而且从来没有打算制作Mac
版本,如果你知道这个应用没有使用任何iPhone
硬件,如GPS
或加速计,那么也许你可以让它通过Mac App Store
提供,但这不会带来良好的用户体验。
Catalyst Apps
¶
对于iPad
应用项目,你可以在Xcode
中勾选一个按钮,让它也作为一个macOS
应用来构建。苹果公司在他们自己的应用程序中经常使用这个功能。
一个例子是Home
的应用程序。我的房子里有很多自动灯,所以这对我来说是一个有趣的应用。主页屏幕看起来与iPad
版本几乎相同,而且运行良好。
但看看这个对话框:
这显然是对iPad
版本的完全复制,具有巨大的控制和大量的空白空间。该应用程序使用标准的菜单栏,但菜单并没有显示我所期望的所有项目。
关键原则:
- 灵活 - 部分
- 熟悉的 - 部分
- 扩张性 - 部分
- 精确 - 没有
总分:1.5 / 4
你应该把它作为让你的应用程序在Mac
上使用的一种方式吗?也许吧。
如果你已经有了一个iPad
应用程序,你想不费吹灰之力就能把它放到Mac上,那么这就是你要做的。有一些变通方法可以使催化剂应用程序看起来更像Mac
,我们有一本书,催化剂教程,可以帮助你!
Web Apps & Electron Apps
¶
没有哪个苹果公司的解决方案会给你一个真正的跨平台应用程序。如果你需要把你的应用放到Windows
和macOS
上,那么网络应用可能是你最好的选择。你可以使用Electron将你的网络应用捆绑成一个独立的应用,你可以发布,甚至通过Mac App Store
。
Electron
应用程序在资源使用方面有一个坏名声。如果你的Mac
感觉迟钝,打开"活动监视器"。你可能会发现你的内存或CPU
被一个应用程序的多个实例所占用。这通常是一个Electron
应用程序。
然而,也有一些优秀的Electron
应用程序可用。Visual Studio Code
是一个用于网络开发的非常好的应用程序。
没有人会把Visual Studio Code
误认为是一个本地Mac
应用程序,但在Mac
和Windows PC
上使用它的人将会欣赏它的一致性。
关键原则:
- 灵活 - 是的
- 熟悉的 - 部分
- 扩张性 - 是的
- 精确 - 是的
总分:3.5 / 4
你应该把它作为让你的应用程序在Mac
上使用的一种方式吗?是的,如果你的应用程序必须是跨平台的。
Visual Studio Code
是跨平台应用程序的一个很好的例子,它表现得很好。但微软已经宣布,Visual Studio
,他们用于创建.NET
、C++
和Electron
应用程序的主要开发应用程序,正在将Mac
版本从跨平台转移到原生macOS
上,以便提高"性能、可靠性和产品质量"。他们有足够的资源来制作两个版本的应用程序,并决定原生Mac
应用程序将为使用Mac
的客户提供更好的体验。
Note
另一个可能的跨平台选择是Flutter
,它是谷歌的一项技术,允许跨平台开发。他们正在进入桌面空间,但到目前为止,这只是一个测试版,所以我无法做出评估。看看它的发展情况将是很有趣的。
本地Mac
应用程序¶
这里最明显的例子是Finder
--也许是Mac
的终极应用。当然,它是最常用的。
主要原则:
- 灵活 - 是的
- 熟悉的 - 是的
- 扩张性 - 是的
- 精确 - 是
总体得分:4 / 4
你应该用它作为让你的应用程序在Mac
上运行的方法吗?是的。
获奖者是...¶
那么,现在你已经看过了其他的选择,你应该编写本地Mac
应用程序吗?是的!"。
如果你的应用程序既要在Windows
上运行,又要在macOS
上运行,那么你就必须写两个完整的应用程序,或者采用跨平台的解决方案,比如Electron
。在这种情况下,你的选择是有限的。
如果你是为苹果生态系统编写的,那么就编写一个原生的Mac
应用程序。没有其他的解决方案可以让你的应用程序具有真正的Mac
外观和感觉。没有其他解决方案能如此无缝地适应不同的设备和输入法。没有其他解决方案能在每次更新时保持与操作系统一样的现代化。
用户关心他们在Mac
上使用的应用程序。
Setapp
是一个针对Mac
的应用程序订阅服务,他们每年都做调查。你可以自己阅读完整的2021年调查结果,但这里是报告中的一段话。
Mac应用程序让用户感觉更有生产力
。 我们还发现,用户更喜欢本地应用程序和专为Mac
设计的应用程序。
代码共享¶
一旦你决定编写一个原生Mac
应用,你就不必每次都从头开始。你已经有一个iOS
应用了吗?很好!你可以重用很多代码。你可以重复使用大量的代码。
反过来说也是如此。如果你从一个原生的Mac
应用开始,你可以把它作为一个iOS
应用的基础。
想一想On This Day
应用程序中的所有代码。数据模型、设置和数据流机制是完全可以转移的。主要的任务是重新考虑界面,使它给iOS
用户带来的体验与Mac
版本给Mac
用户的体验一样好。如果你只是复制界面,你就会错过iOS
的独特优势。
当你创建一个新项目时,Xcode
有一个Multiplatform
选项。这设置了一个具有共享文件、特定平台文件和两个目标的项目:
这是一个比Catalyst
更好的选择,因为它允许你有一个共享代码文件的单一项目,以及只属于其中一个目标的文件。你可以得到Catalyst
的代码重用,同时保持足够的独立性来创建两个应用,这两个应用在各自的平台上都是真正的本地应用。
多平台模板使用SwiftUI
,这很合理,因为SwiftUI
是苹果的多平台框架。但这仍然让你可以根据需要灵活地插入AppKit
和UIKit
组件。你创建的一些SwiftUI
视图将特定于某个特定的平台,但其他的,特别是较小的组件视图,将可在两个目标中使用。
挑战¶
看看你的Mac
上的其他应用程序。哪些看起来不错?哪些是你喜欢使用的?哪些看起来是专门为macOS
编写的,哪些是最初为其他平台编写的?
你能想出为什么你喜欢使用你的最爱吗?
关键点¶
- 没有一种工具适合每项任务和每组情况。你必须评估你的需求,并选择能给你和你的用户带来最佳效果的工具。
- 你可以选择几种不同的技术来编写一个
macOS
应用程序。 - 只有原生应用程序才能提供完整的
Mac
体验。 - 原生的
Mac
应用程序有一种特殊的外观和感觉,而用户确实很欣赏这一点。 - 您可以从一个多平台的
Xcode
项目开始,它允许代码共享,并且仍然可以创建原生应用程序。
接下来去哪?¶
2021
年WWDC
上的两场SwiftUI on the Mac
会议真的很有用。
这就是On This Day
应用程序的收尾工作。在下一节中,你将建立一个完全不同类型的Mac
应用程序--一个菜单栏应用程序。