使用 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 App Store 之外發佈 macOS 應用程式之前對其進行公證。
上述兩個流程的第一步都涉及到在 Xcode 中使用您的應用程式。若要能夠從 Xcode 內部編譯您的應用程式,您首先需要使用 flutter build
命令建構發佈版本,然後開啟 Flutter macOS Runner 應用程式。
flutter build macos
open macos/Runner.xcworkspace
進入 Xcode 後,請依照 Apple 關於對 macOS 應用程式進行公證,或透過 App Store 發佈應用程式的文件操作。您也應該閱讀下面的macOS 特定支援章節,以了解權限、應用程式沙箱和強化執行期如何影響您可發佈的應用程式。
建構和發佈 macOS 應用程式提供了更詳細的逐步解說,說明如何將 Flutter 應用程式發佈到 App Store。
權限和應用程式沙箱
#macOS 建置預設會設定為簽署,並使用應用程式沙箱進行沙箱處理。這表示如果您想將特定功能或服務授予您的 macOS 應用程式,例如以下項目:
- 存取網際網路
- 從內建相機擷取影片和影像
- 存取檔案
那麼您必須在 Xcode 中設定特定的權限。以下章節將說明如何執行此操作。
設定權限
#沙箱設定的管理在 macos/Runner/*.entitlements
檔案中完成。編輯這些檔案時,您不應移除原始的 Runner-DebugProfile.entitlements
例外 (支援傳入網路連線和 JIT),因為它們對於 debug
和 profile
模式的正常運作是必要的。
如果您習慣透過 Xcode 功能 UI 管理權限檔案,請注意,功能編輯器只會更新兩個檔案中的一個,或者在某些情況下,它會建立一個全新的權限檔案,並切換專案以將其用於所有設定。這兩種情況都會導致問題。我們建議您直接編輯這些檔案。除非您有非常具體的原因,否則您應該始終對兩個檔案進行相同的變更。
如果您保持應用程式沙箱啟用 (如果您計劃在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 Store 之外發佈您的應用程式,您需要對您的應用程式進行公證,以確保與 macOS 的相容性。這需要啟用強化執行期選項。一旦您啟用它,您需要一個有效的簽署憑證才能建置。
預設情況下,權限檔案允許偵錯建置的 JIT,但與應用程式沙箱一樣,您可能需要管理其他權限。如果您同時啟用了應用程式沙箱和強化執行期,您可能需要為相同的資源新增多個權限。例如,麥克風存取將需要 com.apple.security.device.audio-input
(用於強化執行期) 和 com.apple.security.device.microphone
(用於應用程式沙箱)。
有關此主題的更多資訊,請參閱 Apple 開發人員網站上的強化執行期。
除非另有說明,否則本網站上的文件反映了 Flutter 的最新穩定版本。頁面最後更新於 2024-05-14。 檢視來源 或 回報問題。