跳至主要內容

應用程式開發人員的 Swift Package Manager

Flutter 的 Swift Package Manager 整合有幾個優點

  1. 提供存取 Swift 套件生態系統的途徑。Flutter 外掛程式可以使用日益成長的 Swift 套件 生態系統。
  2. 簡化 Flutter 安裝。Xcode 包含 Swift Package Manager。如果您的專案使用 Swift Package Manager,則不需要安裝 Ruby 和 CocoaPods。

如果您在 Flutter 的 Swift Package Manager 支援中發現錯誤,請提出問題

如何開啟 Swift Package Manager

#

Flutter 的 Swift Package Manager 支援預設為關閉。若要開啟它

  1. 切換至 Flutter 的 main 通道

    sh
    flutter channel main --no-cache-artifacts
  2. 升級至最新的 Flutter SDK 並下載成品

    sh
    flutter upgrade
  3. 開啟 Swift Package Manager 功能

    sh
    flutter config --enable-swift-package-manager

使用 Flutter CLI 執行應用程式 會遷移專案以新增 Swift Package Manager 整合。這會讓您的專案下載 Flutter 外掛程式所依賴的 Swift 套件。具有 Swift Package Manager 整合的應用程式需要 Flutter 版本 3.24 或更高版本。若要使用舊版的 Flutter,您需要從應用程式中移除 Swift Package Manager 整合

對於尚未支援 Swift Package Manager 的依賴性,Flutter 會退回使用 CocoaPods。

如何關閉 Swift Package Manager

#

停用 Swift Package Manager 會導致 Flutter 對所有依賴性使用 CocoaPods。但是,Swift Package Manager 仍然與您的專案整合。若要從您的專案中完全移除 Swift Package Manager 整合,請遵循如何移除 Swift Package Manager 整合的指示。

針對單一專案關閉

#

在專案的 pubspec.yaml 檔案中,於 flutter 區段下,新增 disable-swift-package-manager: true

pubspec.yaml
yaml
# The following section is specific to Flutter packages.
flutter:
  disable-swift-package-manager: true

這會針對此專案的所有貢獻者關閉 Swift Package Manager。

針對所有專案全域關閉

#

執行下列命令

sh
flutter config --no-enable-swift-package-manager

這會針對目前使用者關閉 Swift Package Manager。

如果專案與 Swift Package Manager 不相容,所有貢獻者都需要執行此命令。

如何新增 Swift Package Manager 整合

#

新增至 Flutter 應用程式

#

當您開啟 Swift Package Manager 後,下次使用 CLI 執行應用程式時,Flutter CLI 會嘗試遷移您的專案。此遷移會更新您的 Xcode 專案,以使用 Swift Package Manager 來新增 Flutter 外掛程式依賴性。

若要遷移您的專案

  1. 開啟 Swift Package Manager.

  2. 使用 Flutter CLI 執行 iOS 應用程式。

    如果您的 iOS 專案還沒有 Swift Package Manager 整合,Flutter CLI 會嘗試遷移您的專案,並輸出類似以下的內容

    flutter run
    Adding Swift Package Manager integration...

    自動 iOS 遷移會修改 ios/Runner.xcodeproj/project.pbxprojios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme 檔案。

  3. 如果 Flutter CLI 的自動遷移失敗,請遵循手動新增 Swift Package Manager 整合中的步驟。

[選用] 若要檢查您的專案是否已遷移

  1. 在 Xcode 中執行應用程式。

  2. 確保 Run Prepare Flutter Framework Script 作為預先動作執行,且 FlutterGeneratedPluginSwiftPackage 為目標依賴性。

    Ensure Run Prepare Flutter Framework Script runs as a pre-action
    確保 Run Prepare Flutter Framework Script 作為預先動作執行

當您開啟 Swift Package Manager 後,下次使用 CLI 執行應用程式時,Flutter CLI 會嘗試遷移您的專案。此遷移會更新您的 Xcode 專案,以使用 Swift Package Manager 來新增 Flutter 外掛程式依賴性。

若要遷移您的專案

  1. 開啟 Swift Package Manager.

  2. 使用 Flutter CLI 執行 macOS 應用程式。

    如果您的 macOS 專案還沒有 Swift Package Manager 整合,Flutter CLI 會嘗試遷移您的專案,並輸出類似以下的內容

    flutter run -d macos
    Adding Swift Package Manager integration...

    自動 iOS 遷移會修改 macos/Runner.xcodeproj/project.pbxprojmacos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme 檔案。

  3. 如果 Flutter CLI 的自動遷移失敗,請遵循手動新增 Swift Package Manager 整合中的步驟。

[選用] 若要檢查您的專案是否已遷移

  1. 在 Xcode 中執行應用程式。

  2. 確保 Run Prepare Flutter Framework Script 作為預先動作執行,且 FlutterGeneratedPluginSwiftPackage 為目標依賴性。

    Ensure Run Prepare Flutter Framework Script runs as a pre-action
    確保 Run Prepare Flutter Framework Script 作為預先動作執行

手動新增至 Flutter 應用程式

#

當您開啟 Swift Package Manager 後,下次使用 CLI 執行應用程式時,Flutter CLI 會嘗試遷移您的專案以使用 Swift Package Manager。

但是,如果發生非預期的修改,Flutter CLI 工具可能無法自動遷移您的專案。

如果自動遷移失敗,請使用下列步驟將 Swift Package Manager 整合手動新增至專案。

在手動遷移之前,請提出問題;這有助於 Flutter 團隊改進自動遷移程序。請在您的問題中包含錯誤訊息,如果可能,請包含以下檔案的副本

  • ios/Runner.xcodeproj/project.pbxproj
  • ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (或所使用 flavor 的 xcsheme)

步驟 1:新增 FlutterGeneratedPluginSwiftPackage 套件依賴性

#
  1. 在 Xcode 中開啟您的應用程式 (ios/Runner.xcworkspace)。

  2. 導覽至專案的 Package Dependencies

    The project's package dependencies
    專案的套件依賴性

  3. 按一下 add

  4. 在開啟的對話方塊中,按一下 Add Local...

  5. 導覽至 ios/Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage 並按一下 Add Package

  6. 確保它已新增至 Runner 目標,並按一下 Add Package

    Ensure that the package is added to the  target
    確保套件已新增至 Runner 目標

  7. 確保 FlutterGeneratedPluginSwiftPackage 已新增至 Frameworks, Libraries, and Embedded Content

    Ensure that  was added to Frameworks, Libraries, and Embedded Content
    確保 FlutterGeneratedPluginSwiftPackage 已新增至 Frameworks, Libraries, and Embedded Content

步驟 2:新增 Run Prepare Flutter Framework Script 預先動作

#

必須針對每個 flavor 完成下列步驟。

  1. 前往 Product > Scheme > Edit Scheme

  2. 在左側邊欄中展開 Build 區段。

  3. 按一下 Pre-actions

  4. 按一下 add 並從選單中選取 New Run Script Action

  5. 按一下 Run Script 標題,並將其變更為

    Run Prepare Flutter Framework Script
  6. Provide build settings from 變更為 Runner 應用程式。

  7. 在文字方塊中輸入以下內容

    sh
    "$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh" prepare

    Add Run Prepare Flutter Framework Script build pre-action
    新增 Run Prepare Flutter Framework Script 建置預先動作

步驟 3:執行應用程式

#
  1. 在 Xcode 中執行應用程式。

  2. 確保 Run Prepare Flutter Framework Script 作為預先動作執行,且 FlutterGeneratedPluginSwiftPackage 為目標依賴性。

    Ensure Run Prepare Flutter Framework Script runs as a pre-action
    確保 Run Prepare Flutter Framework Script 作為預先動作執行

  3. 確保應用程式可使用 flutter run 在命令列中執行。

當您開啟 Swift Package Manager 後,下次使用 CLI 執行應用程式時,Flutter CLI 會嘗試遷移您的專案以使用 Swift Package Manager。

但是,如果發生非預期的修改,Flutter CLI 工具可能無法自動遷移您的專案。

如果自動遷移失敗,請使用下列步驟將 Swift Package Manager 整合手動新增至專案。

在手動遷移之前,請提出問題;這有助於 Flutter 團隊改進自動遷移程序。請在您的問題中包含錯誤訊息,如果可能,請包含以下檔案的副本

  • macos/Runner.xcodeproj/project.pbxproj
  • macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (或所使用 flavor 的 xcsheme)

步驟 1:新增 FlutterGeneratedPluginSwiftPackage 套件依賴性

#
  1. 在 Xcode 中開啟您的應用程式 (macos/Runner.xcworkspace)。

  2. 導覽至專案的 Package Dependencies

    The project's package dependencies
    專案的套件依賴性

  3. 按一下 add

  4. 在開啟的對話方塊中,按一下 Add Local...

  5. 導覽至 macos/Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage 並按一下 Add Package

  6. 確保它已新增至 Runner 目標,並按一下 Add Package

    Ensure that the package is added to the  target
    確保套件已新增至 Runner 目標

  7. 確保 FlutterGeneratedPluginSwiftPackage 已新增至 Frameworks, Libraries, and Embedded Content

    Ensure that  was added to Frameworks, Libraries, and Embedded Content
    確保 FlutterGeneratedPluginSwiftPackage 已新增至 Frameworks, Libraries, and Embedded Content

步驟 2:新增 Run Prepare Flutter Framework Script 預先動作

#

必須針對每個 flavor 完成下列步驟。

  1. 前往 Product > Scheme > Edit Scheme

  2. 在左側邊欄中展開 Build 區段。

  3. 按一下 Pre-actions

  4. 按一下 add 按鈕,並從選單中選取 New Run Script Action

  5. 按一下 Run Script 標題,並將其變更為

    Run Prepare Flutter Framework Script
  6. Provide build settings from 變更為 Runner 目標。

  7. 在文字方塊中輸入以下內容

    sh
    "$FLUTTER_ROOT"/packages/flutter_tools/bin/macos_assemble.sh prepare

    Add Run Prepare Flutter Framework Script build pre-action
    新增 Run Prepare Flutter Framework Script 建置預先動作

步驟 3:執行應用程式

#
  1. 在 Xcode 中執行應用程式。

  2. 確保 Run Prepare Flutter Framework Script 作為預先動作執行,且 FlutterGeneratedPluginSwiftPackage 為目標依賴性。

    Ensure  runs as a pre-action
    確保 Run Prepare Flutter Framework Script 作為預先動作執行

  3. 確保應用程式可使用 flutter run 在命令列中執行。

新增至現有應用程式(add-to-app)

#

Flutter 的 Swift Package Manager 支援不適用於 add-to-app 情境。

若要隨時掌握狀態更新,請參閱 flutter#146957

新增至自訂 Xcode 目標

#

您的 Flutter Xcode 專案可以有自訂的 Xcode 目標,以建置其他產品,例如框架或單元測試。您可以將 Swift Package Manager 整合新增至這些自訂的 Xcode 目標。

遵循如何將 Swift Package Manager 整合手動新增至專案中的步驟。

步驟 1,清單項目 6 中,使用您的自訂目標而不是 Flutter 目標。

步驟 2,清單項目 6 中,使用您的自訂目標而不是 Flutter 目標。

如何移除 Swift Package Manager 整合

#

若要新增 Swift Package Manager 整合,Flutter CLI 會遷移您的專案。此遷移會更新您的 Xcode 專案,以新增 Flutter 外掛程式依賴性。

若要復原此遷移

  1. 關閉 Swift Package Manager.

  2. 清除您的專案

    sh
    flutter clean
  3. 在 Xcode 中開啟您的應用程式 (ios/Runner.xcworkspacemacos/Runner.xcworkspace)。

  4. 導覽至專案的 Package Dependencies

  5. 按一下 FlutterGeneratedPluginSwiftPackage 套件,然後按一下 remove

    The  to remove
    要移除的 FlutterGeneratedPluginSwiftPackage

  6. 導覽至 Runner 目標的 Frameworks, Libraries, and Embedded Content

  7. 按一下 FlutterGeneratedPluginSwiftPackage,然後按一下 remove

    The  to remove
    要移除的 FlutterGeneratedPluginSwiftPackage

  8. 前往 Product > Scheme > Edit Scheme

  9. 在左側邊欄中展開 Build 區段。

  10. 按一下 Pre-actions

  11. 展開 Run Prepare Flutter Framework Script

  12. 按一下 delete

    The build pre-action to remove
    要移除的建置預先動作

如何使用需要較高作業系統版本的 Swift Package Manager Flutter 外掛程式

#

如果 Swift Package Flutter Manager 外掛程式需要比專案更高的作業系統版本,您可能會收到類似這樣的錯誤

Target Integrity (Xcode): The package product 'plugin_name_ios' requires minimum platform version 14.0 for the iOS platform, but this target supports 12.0

若要使用外掛程式,請增加應用程式目標的 Minimum Deployments

The target's Minimum Deployments setting
目標的 Minimum Deployments 設定