跳到主內容

使用 Flutter 構建 macOS 應用

使用 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 App Store 之外的方式分發你的 macOS 應用程式之前,你需要對其進行公證。

上述兩種過程的第一個步驟涉及在 Xcode 中使用你的應用程式。要能夠從 Xcode 內部編譯你的應用程式,首先需要使用 flutter build 命令為釋出構建應用程式,然後開啟 Flutter macOS Runner 應用程式。

bash
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),因為它們對於 debugprofile 模式的正常執行是必要的。

如果你習慣透過 Xcode 功能 UI 管理許可權檔案,請注意功能編輯器只會更新兩個檔案中的一個,或者在某些情況下,它會建立一個全新的許可權檔案並切換專案以使用它來處理所有配置。任何一種情況都會導致問題。我們建議你直接編輯檔案。除非你有非常具體的原因,否則你應始終對兩個檔案進行相同的更改。

如果你保持 App 沙盒啟用狀態(如果你計劃在 App Store 中分發你的應用程式,這是必需的),那麼當你新增某些外掛或其他本機功能時,你需要管理應用程式的許可權。例如,使用 file_chooser 外掛需要新增 com.apple.security.files.user-selected.read-onlycom.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 Developer 網站上的 App 沙盒許可權

強化執行時

#

如果你選擇在 App Store 之外分發你的應用程式,你需要對你的應用程式進行公證,以確保與 macOS 相容。這需要啟用強化執行時選項。啟用後,你需要一個有效的簽名證書才能構建。

預設情況下,許可權檔案允許除錯構建的 JIT,但與 App 沙盒一樣,你可能需要管理其他許可權。如果同時啟用了 App 沙盒和強化執行時,你可能需要為同一資源新增多個許可權。例如,麥克風訪問需要 com.apple.security.device.audio-input(用於強化執行時)和 com.apple.security.device.microphone(用於 App 沙盒)。

有關此主題的更多資訊,請參閱 Apple Developer 網站上的 強化執行時