跳转至

6.为什么要写一个macOS应用程序?

在前面五章中,你已经创建了一个真正的、原生的macOS应用程序。它的外观和行为都像一个标准的Mac应用程序,并且遵循所有的苹果准则。

但很多Mac应用程序不是这样构建的。

在本章中,你将了解Mac应用程序的特点,并考虑一些构建应用程序的替代方法。你将评估每种方法的优势和劣势。

在这一章中,你不会构建任何东西,如果你喜欢继续编码,请跳过它。但它会帮助你了解为什么编写一个原生的Mac应用程序是个好主意。

什么是Mac应用程序?

2021WWDC大会上,苹果工程师做了两个关于MacSwiftUI的代码演示。他们首先列出了优秀Mac应用的四个关键原则。

img

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

img

我下载了一个名为Calculator - Free Calculator的免费应用程序,它说是为iPad设计的。当我运行它时,我看到一个简单的巨大的窗口,有巨大的控制,底部有一个广告,并立即要求给应用程序蓝牙访问。为什么任何计算器都需要这个,我不清楚。

我把它缩小了截图,但在我的iMac上窗口是1800 x 2382

img

首选项很有意思,特别是Touch Alternatives部分。这些设置是自动生成的:

img

关键原则:

  • 灵活 - 没有
  • 熟悉 - 不, 对Mac用户来说不熟悉。
  • 扩张性 - 不
  • 精确 - 没有

总分:0 / 4

你应该把它作为让你的应用程序在Mac上使用的一种方式吗?不。

这是一个巧妙的技巧,但是为iPhone设计的应用程序不可能在Mac屏幕上看起来不错。

如果你有一个iOS应用,而且从来没有打算制作Mac版本,如果你知道这个应用没有使用任何iPhone硬件,如GPS或加速计,那么也许你可以让它通过Mac App Store提供,但这不会带来良好的用户体验。

Catalyst Apps

对于iPad应用项目,你可以在Xcode中勾选一个按钮,让它也作为一个macOS应用来构建。苹果公司在他们自己的应用程序中经常使用这个功能。

一个例子是Home的应用程序。我的房子里有很多自动灯,所以这对我来说是一个有趣的应用。主页屏幕看起来与iPad版本几乎相同,而且运行良好。

但看看这个对话框:

img

这显然是对iPad版本的完全复制,具有巨大的控制和大量的空白空间。该应用程序使用标准的菜单栏,但菜单并没有显示我所期望的所有项目。

关键原则:

  • 灵活 - 部分
  • 熟悉的 - 部分
  • 扩张性 - 部分
  • 精确 - 没有

总分:1.5 / 4

你应该把它作为让你的应用程序在Mac上使用的一种方式吗?也许吧。

如果你已经有了一个iPad应用程序,你想不费吹灰之力就能把它放到Mac上,那么这就是你要做的。有一些变通方法可以使催化剂应用程序看起来更像Mac,我们有一本书,催化剂教程,可以帮助你!

Web Apps & Electron Apps

没有哪个苹果公司的解决方案会给你一个真正的跨平台应用程序。如果你需要把你的应用放到WindowsmacOS上,那么网络应用可能是你最好的选择。你可以使用Electron将你的网络应用捆绑成一个独立的应用,你可以发布,甚至通过Mac App Store

Electron应用程序在资源使用方面有一个坏名声。如果你的Mac感觉迟钝,打开"活动监视器"。你可能会发现你的内存或CPU被一个应用程序的多个实例所占用。这通常是一个Electron应用程序。

然而,也有一些优秀的Electron应用程序可用。Visual Studio Code是一个用于网络开发的非常好的应用程序。

没有人会把Visual Studio Code误认为是一个本地Mac应用程序,但在MacWindows PC上使用它的人将会欣赏它的一致性。

img

关键原则:

  • 灵活 - 是的
  • 熟悉的 - 部分
  • 扩张性 - 是的
  • 精确 - 是的

总分:3.5 / 4

你应该把它作为让你的应用程序在Mac上使用的一种方式吗?是的,如果你的应用程序必须是跨平台的。

Visual Studio Code是跨平台应用程序的一个很好的例子,它表现得很好。但微软已经宣布,Visual Studio,他们用于创建.NETC++Electron应用程序的主要开发应用程序,正在将Mac版本从跨平台转移到原生macOS上,以便提高"性能、可靠性和产品质量"。他们有足够的资源来制作两个版本的应用程序,并决定原生Mac应用程序将为使用Mac的客户提供更好的体验。

Note

另一个可能的跨平台选择是Flutter,它是谷歌的一项技术,允许跨平台开发。他们正在进入桌面空间,但到目前为止,这只是一个测试版,所以我无法做出评估。看看它的发展情况将是很有趣的。

本地Mac应用程序

这里最明显的例子是Finder--也许是Mac的终极应用。当然,它是最常用的。

img

主要原则:

  • 灵活 - 是的
  • 熟悉的 - 是的
  • 扩张性 - 是的
  • 精确 - 是

总体得分: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选项。这设置了一个具有共享文件、特定平台文件和两个目标的项目:

img

这是一个比Catalyst更好的选择,因为它允许你有一个共享代码文件的单一项目,以及只属于其中一个目标的文件。你可以得到Catalyst的代码重用,同时保持足够的独立性来创建两个应用,这两个应用在各自的平台上都是真正的本地应用。

多平台模板使用SwiftUI,这很合理,因为SwiftUI是苹果的多平台框架。但这仍然让你可以根据需要灵活地插入AppKitUIKit组件。你创建的一些SwiftUI视图将特定于某个特定的平台,但其他的,特别是较小的组件视图,将可在两个目标中使用。

挑战

看看你的Mac上的其他应用程序。哪些看起来不错?哪些是你喜欢使用的?哪些看起来是专门为macOS编写的,哪些是最初为其他平台编写的?

你能想出为什么你喜欢使用你的最爱吗?

关键点

  • 没有一种工具适合每项任务和每组情况。你必须评估你的需求,并选择能给你和你的用户带来最佳效果的工具。
  • 你可以选择几种不同的技术来编写一个macOS应用程序。
  • 只有原生应用程序才能提供完整的Mac体验。
  • 原生的Mac应用程序有一种特殊的外观和感觉,而用户确实很欣赏这一点。
  • 您可以从一个多平台的Xcode项目开始,它允许代码共享,并且仍然可以创建原生应用程序。

接下来去哪?

2021WWDC上的两场SwiftUI on the Mac会议真的很有用。

这就是On This Day应用程序的收尾工作。在下一节中,你将建立一个完全不同类型的Mac应用程序--一个菜单栏应用程序。