簡體   English   中英

如何在現有的 macOS 項目中使用 Swift Package Manager?

[英]How do I use Swift Package Manager with an existing macOS project?

我一直在使用 Cocoapods 來管理我的 Swift 項目的依賴項。 我遇到了 Cocoapods 上沒有列出的這個包 相反,它建議使用 Swift Package Manager。 然而,每當我嘗試使用 Swift Package Manager 做任何事情時,它最終都會完全破壞我的整個項目。

因此,為了弄清楚如何實際使用 Swift Package Manager,我在一個測試項目中使用它。

這是我嘗試過的:

  1. 從 Xcode 創建一個新項目

文件 -> 新建 -> 項目 -> Cocoa App

產品名稱:basic-ssh-test

這將創建一個基本應用程序,當我點擊“運行”時它會加載一個空白窗口。 只是為了好玩,我將print("test")到我的AppDelegateapplicationDidFinishLaunching函數中,因此當我運行程序時調試窗口會顯示“test”。

現在我想添加Shout包作為依賴項。

  1. swift package init --type executable

這將創建以下文件:

Creating executable package: basic-ssh-test
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/basic-ssh-test/main.swift
Creating Tests/

現在我要將“Shout”依賴項添加到我的新Package.swift文件中:

// swift-tools-version:4.0
import PackageDescription

let package = Package(
    name: "basic-ssh-test",
    dependencies: [
        .package(url: "https://github.com/jakeheis/Shout", from: "0.2.0")
    ],
    targets: [
        .target(
            name: "basic-ssh-test",
            dependencies: ["Shout"]),
    ]
)

我將引入依賴項:

  1. swift package resolve

這導致依賴項被拉入.build目錄:

Fetching https://github.com/jakeheis/Shout
Fetching https://github.com/jakeheis/CSSH
Fetching https://github.com/IBM-Swift/BlueSocket
Cloning https://github.com/IBM-Swift/BlueSocket
Resolving https://github.com/IBM-Swift/BlueSocket at 0.12.91
Cloning https://github.com/jakeheis/CSSH
Resolving https://github.com/jakeheis/CSSH at 1.0.3
Cloning https://github.com/jakeheis/Shout
Resolving https://github.com/jakeheis/Shout at 0.3.0

現在我重新生成xcodeproj文件:

  1. swift package generate-xcodeproj

現在,當我打開xcodeproj文件時,有一個名為Sources的新組,它有一個目錄basic-ssh-test其中有一個 swift 文件main.swift with print("Hello, world!")

我真正有興趣運行的代碼現在位於一個名為basic-ssh-test的藍色文件夾中。 所有必要的文件仍然在那里,但 Xcode 運行的是main.swift文件,而不是運行我的應用程序。 我可以判斷,因為調試輸出是“Hello, world!” 而不是“測試”。

我讀過一些教程,聲稱 Swift Package Manager 將移動我的源文件並繼續像以前一樣構建,但顯然情況並非如此。

我的構建設置中也不再有“主界面”選項,因此我無法選擇“MainMenu.xib”作為我的應用程序起點。

這與我嘗試在現有項目中使用 Swift 項目管理器時發生的情況基本相同。 它引入了依賴項,但它基本上忽略了我現有的整個項目,只運行“hello world”代碼。

如何使用 Swift Package Manager 在不忽略現有代碼庫的情況下向現有項目添加依賴項?

我認為 SPM 僅與 Mac 命令行可執行文件或庫兼容。 明確指出 SPM 根本不支持 iOS、watchOS 或 tvOS 平台。 但是,由於 macOS AppKit/Cocoa 應用程序目標與 iOS 或 tvOS Xcode 目標非常相似,我會說這個聲明意味着 SPM 也不能與開箱即用的 macOS Cocoa 應用程序一起使用,這就是我認為的希望。

看起來這里一些關於如何將它與 iOS 應用程序目標一起使用的工作,這些目標應該在很大程度上轉化為 macOS Cocoa 目標。

在撰寫本文之前, Swift Package Manager不支持 iOS、tvOS 和 watchOS。 相反,您必須將包中的文件直接添加到您的項目中。

我建議您在項目中創建一個 Dependencies 組,並在其下創建一個帶有包名稱的組,例如這個答案

因此,首先您將要導入到項目中的文件依賴項添加到我們之前創建的依賴項組中包含的包名稱的名稱中。

添加文件后,您可以像往常一樣訪問代碼,如下圖所示。 不需要進口。 您可以在此處查看更多詳細信息。 希望它有幫助。

在此處輸入圖片說明

您可以使用 SPM 創建一個窗口化應用程序(我有一個整個項目正在等待執行此操作的 ABI),您只需要在 swift.main 中添加一些樣板即可。 我會把它挖出來。

然而,其他人建議的方法永遠不會奏效(使用當前版本的 SPM)。

但是,我看到的是您確實想使用 SPM 來管理依賴項(保持最新等)。 所以我認為你可以更輕松地做到這一點。

與其創建一個可執行文件作為您的默認目標,不如創建一個庫(也許稱之為 basic-ssh-dependencies)。 生成您的 Xcode 項目並將其拖到您的主要 Xcode 項目中,並將您的目標配置為依賴它。 當您從 SPM 更新庫以更改依賴項時,您應該重新生成 Xcode-proj。

讓我知道你的里程和任何皺紋,或者我是否誤解了你想要達到的目標。

XCode 11 的更新

這是一個容易得多,現在用的這個寫作的XCode的當前版本是11.3.1的XCode 11.作為。

對於現有的 XCode 項目,只需:

  1. 轉到File->Swift Packages->Add Package Dependency...
  2. 輸入要添加的托管包的 URL
  3. 選擇有關您的應用將使用哪些版本的規則
  4. 單擊Finish

文件、Swift 包、添加包依賴...

添加網址

套餐規則

已添加包

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM