跳到主要內容

新增 iOS 應用程式擴充功能

iOS 應用程式擴充功能可讓您在應用程式外部擴展功能。您的應用程式可以顯示為首頁小工具,或者您可以讓部分應用程式在其他應用程式中可用。

若要深入了解應用程式擴充功能,請查看 Apple 的文件

iOS 18 新增了自訂裝置「控制中心」的功能,包括建立多個頁面。您也可以使用 ControlCenter API 為「控制中心」建立新的切換開關,以突顯您的應用程式。

如何在 Flutter 應用程式中新增應用程式擴充功能?

#

若要將應用程式擴充功能新增至您的 Flutter 應用程式,請將擴充點目標新增至您的 Xcode 專案。

  1. 在終端機視窗中,從您的 Flutter 專案目錄執行 open ios/Runner.xcworkspace,以開啟您專案中的預設 Xcode 工作區。

  2. 在 Xcode 中,從選單列選取 File -> New -> Target

    Opening the File -> New menu, then selecting Target in Xcode.
  3. 選取您想要新增的應用程式擴充功能。此選取會在您專案中的新資料夾中產生擴充功能專屬程式碼。若要深入了解產生的程式碼以及每個擴充點的 SDK,請查看 Apple 的文件中的資源。

若要了解如何將首頁小工具新增至您的 iOS 裝置,請查看 將首頁小工具新增至您的 Flutter 應用程式程式碼實驗室。

Flutter 應用程式如何與應用程式擴充功能互動?

#

Flutter 應用程式使用與 UIKit 或 SwiftUI 應用程式相同的技術與應用程式擴充功能互動。包含應用程式和應用程式擴充功能不會直接通訊。當裝置使用者與擴充功能互動時,包含應用程式可能不會執行。應用程式和您的擴充功能可以讀取和寫入共用資源,或使用較高階的 API 彼此通訊。

使用較高階的 API

#

某些擴充功能具有 API。例如,Core Spotlight 架構會為您的應用程式建立索引,讓使用者可以從 Spotlight 和 Safari 搜尋。WidgetKit 架構可以觸發您的首頁小工具更新。

為了簡化您的應用程式與擴充功能之間的通訊方式,Flutter 外掛程式會封裝這些 API。若要尋找封裝擴充功能 API 的外掛程式,請查看 善用 Apple 的系統 API 和架構或搜尋 pub.dev

分享資源

#

若要在您的 Flutter 應用程式和您的應用程式擴充功能之間分享資源,請將 Runner 應用程式目標和擴充功能目標放在同一個 App Group 中。

若要將目標新增至 App Group

  1. 在 Xcode 中開啟目標設定。

  2. 導覽至 Signing & Capabilities 索引標籤。

  3. 選取 + Capability,然後選取 App Groups

  4. 從兩個選項中選擇您要新增目標的 App Group

    1. 從清單中選取一個 App Group。
    2. 按一下 + 來新增一個新的 App Group。
Selecting an App Group within an Xcode Runner target configuration.

當兩個目標屬於同一個 App Group 時,它們可以讀取和寫入相同的來源。為您的資料選擇下列其中一個來源。

背景更新

#

背景工作提供一種方法,讓您能夠透過程式碼更新擴充功能,而不論您的應用程式狀態為何。

若要從您的 Flutter 應用程式排程背景工作,請使用 workmanager 外掛程式。

深度連結

#

您可能會想要將使用者從應用程式擴充功能導向至您的 Flutter 應用程式中的特定頁面。若要在您的應用程式中開啟特定路徑,您可以使用 深度連結

使用 Flutter 建立應用程式擴充功能 UI

#

某些應用程式擴充功能會顯示使用者介面。

例如,分享擴充功能可讓使用者方便地與其他應用程式分享內容,例如分享圖片以在社群媒體應用程式上建立新的貼文。

An example of an entry added to the share menu by a Flutter app

從 3.16 版本開始,您可以為應用程式擴充功能建立 Flutter UI,但您必須使用擴充功能安全的 Flutter.xcframework 並嵌入 FlutterViewController,如下一節所述。

  1. 找到擴充功能安全的 Flutter.xcframework 檔案,位於 <path_to_flutter_sdk>/bin/cache/artifacts/engine/ios/extension_safe/Flutter.xcframework

    • 若要建置發行或設定檔模式,請分別在 ios-releaseios-profile 資料夾下尋找架構檔案。
  2. Flutter.xcframework 檔案拖放到您分享擴充功能的架構和程式庫清單中。請確定嵌入欄顯示「Embed & Sign」。

    The Flutter.xcframework file being marked as Embed & Sign in Xcode.
  3. 在 Xcode 中開啟 Flutter 應用程式專案設定以分享建置組態。

    1. 導覽至 Info 索引標籤。
    2. 展開 Configurations 群組。
    3. 展開 DebugProfileRelease 項目。
    4. 針對每個組態,請確定您擴充功能的 Based on configuration file 下拉式選單中的值,與針對正常應用程式目標選取的值相符。
    An example Xcode Runner configuration with each property set to: Based on configuration file.
  4. (選用) 如有需要,請將任何情節提要檔案取代為擴充功能類別。

    1. Info.plist 檔案中,刪除 NSExtensionMainStoryboard 屬性。
    2. 新增 NSExtensionPrincipalClass 屬性。
    3. 將此屬性的值設定為擴充功能的進入點。例如,針對分享擴充功能,通常為 <YourShareExtensionTargetName>.ShareViewController。如果您使用 Objective-C 實作擴充功能,則應省略 <YourShareExtensionTargetName>. 部分。
    Setting the NSExtensionPrincipalClass property in the Info.plist file within Xcode.
  5. 依照新增 Flutter 螢幕中所述,嵌入 FlutterViewController。例如,您可以在分享擴充功能中顯示 Flutter 應用程式中的特定路徑。

    swift
    import UIKit
    import Flutter
    
    class ShareViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            showFlutter()
        }
    
        func showFlutter() {
            let flutterViewController = FlutterViewController(project: nil, nibName: nil, bundle: nil)
            addChild(flutterViewController)
            view.addSubview(flutterViewController.view)
            flutterViewController.view.frame = view.bounds
        }
    }

測試擴充功能

#

在模擬器和實體裝置上測試擴充功能有稍微不同的程序。

在模擬器上測試

#
  1. 建置並執行主要應用程式目標。
  2. 應用程式在模擬器上啟動後,按 Cmd + Shift + H 以將應用程式縮到最小,這會切換到首頁畫面。
  3. 啟動支援分享擴充功能的應用程式,例如「照片」應用程式。
  4. 選取相片,點一下分享按鈕,然後點一下您應用程式的分享擴充功能圖示。

在實體裝置上測試

#

您可以使用下列程序或 在模擬器上測試 中的指示,在實體裝置上進行測試。

  1. 啟動分享擴充功能目標。
  2. 在顯示「選擇要執行的應用程式」的快顯視窗中,選取可用於測試分享擴充功能的應用程式,例如「照片」應用程式。
  3. 選取相片,點一下分享按鈕,然後點一下您應用程式的分享擴充功能圖示。

教學

#

如需將應用程式擴充功能與您的 Flutter iOS 應用程式搭配使用的逐步指示,請查看 將首頁小工具新增至您的 Flutter 應用程式程式碼實驗室。