使用 Flutter 构建 macOS 应用
本页面讨论了使用 Flutter 构建 macOS 应用的独有注意事项,包括 shell 集成和通过 Apple Store 分发 macOS 应用。
与 macOS 外观和感觉集成
#虽然您可以使用任何您选择的视觉样式或主题来构建 macOS 应用,但您可能希望调整您的应用以更全面地符合 macOS 的外观和感觉。Flutter 包含 Cupertino 组件集,它提供了一组适用于当前 iOS 设计语言的组件。许多这些组件,包括滑块、开关和分段控件,也适用于 macOS。
或者,您可能会发现 macos_ui 包适合您的需求。此包提供实现了 macOS 设计语言的组件和主题,包括 MacosWindow
框架和脚手架、工具栏、下拉和弹出按钮以及模态对话框。
构建 macOS 应用
#要分发您的 macOS 应用程序,您可以通过 macOS App Store 分发,或者您可以分发 .app
本身,也许是从您自己的网站。从 macOS 10.14.5 开始,您需要在将 macOS 应用程序分发到 macOS App Store 之外之前对其进行公证。
上述两个过程的第一步都涉及在 Xcode 中处理您的应用程序。为了能够从 Xcode 内部编译您的应用程序,您首先需要使用 flutter build
命令为发布版本构建应用程序,然后打开 Flutter macOS Runner 应用程序。
flutter build macos
open macos/Runner.xcworkspace
在 Xcode 内部,请按照 Apple 的关于公证 macOS 应用程序的文档 或关于通过 App Store 分发应用程序的文档 进行操作。您还应该阅读下面的macOS 特定支持 部分,以了解权限、App 沙箱和强化运行时如何影响您的可分发应用程序。
构建和发布 macOS 应用 提供了将 Flutter 应用发布到 App Store 的更详细的分步指南。
权限和 App 沙箱
#默认情况下,macOS 构建配置为已签名,并使用 App 沙箱。这意味着如果您想为您的 macOS 应用授予特定功能或服务,例如:
- 访问互联网
- 从内置摄像头捕获电影和图像
- 访问文件
那么您必须在 Xcode 中设置特定的 权限。以下部分将告诉您如何执行此操作。
设置权限
#沙箱设置的管理在 macos/Runner/*.entitlements
文件中进行。编辑这些文件时,不应删除原始的 Runner-DebugProfile.entitlements
异常(支持传入的网络连接和 JIT),因为它们对于 debug
和 profile
模式正常运行是必需的。
如果您习惯于通过Xcode 功能 UI 管理权限文件,请注意,功能编辑器只会更新两个文件中的一个,或者在某些情况下,它会创建一个全新的权限文件并将项目切换为对所有配置使用它。这两种情况都会导致问题。我们建议您直接编辑文件。除非您有非常具体的原因,否则您应该始终对两个文件进行相同的更改。
如果您保持 App 沙箱启用(如果您计划在 App Store 中分发您的应用程序,则需要这样做),则在添加某些插件或其他原生功能时,需要管理应用程序的权限。例如,使用 file_chooser
插件需要添加 com.apple.security.files.user-selected.read-only
或 com.apple.security.files.user-selected.read-write
权限。另一个常见的权限是 com.apple.security.network.client
,如果您进行任何网络请求,则必须添加此权限。
例如,如果没有 com.apple.security.network.client
权限,网络请求将失败,并显示如下消息:
flutter: SocketException: Connection failed
(OS Error: Operation not permitted, errno = 1),
address = example.com, port = 443
有关这些主题的更多信息,请参阅 Apple 开发者网站上的App 沙箱 和权限。
强化运行时
#如果您选择在 App Store 之外分发您的应用程序,则需要对您的应用程序进行公证以与 macOS 兼容。这需要启用强化运行时选项。启用后,您需要有效的签名证书才能构建。
默认情况下,权限文件允许对调试版本进行 JIT,但是,与 App 沙箱一样,您可能需要管理其他权限。如果您同时启用了 App 沙箱和强化运行时,您可能需要为同一资源添加多个权限。例如,麦克风访问需要 com.apple.security.device.audio-input
(用于强化运行时)和 com.apple.security.device.microphone
(用于 App 沙箱)。
有关此主题的更多信息,请参阅 Apple 开发者网站上的强化运行时。
除非另有说明,否则本网站上的文档反映的是 Flutter 的最新稳定版本。页面最后更新于 2025-01-30。 查看源代码 或 报告问题。