我一直在使用Cocoapods管理我的Swift项目的依赖项。我发现了这个包,它没有列在Cocoapods中。它建议使用Swift Package Manager。然而,每当我尝试使用Swift Package Manager做任何事情时,它最终完全破坏了我的整个项目。
因此,为了弄清楚如何实际使用Swift Package Manager,我在测试项目中进行测试。
以下是我尝试过的:
- 从Xcode创建一个新项目
文件 -> 新建 -> 项目 -> Cocoa App
产品名称:basic-ssh-test
这将创建一个基本应用程序,当我点击“运行”时加载一个空白窗口。只是为了好玩,我在我的AppDelegate
的applicationDidFinishLaunching
函数中添加了print("test")
,所以当我运行程序时,调试窗口上显示“test”。
现在我想将Shout
包添加为依赖项。
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"]),
]
)
我将拉取所需的依赖项:
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
文件:
swift package generate-xcodeproj
现在,当我打开xcodeproj
文件时,会有一个名为Sources
的新组,其中只有一个目录basic-ssh-test
和一个名为main.swift
的单一Swift文件,其中包含print("Hello, world!")
的代码。
我实际上感兴趣的代码现在位于名为basic-ssh-test
的蓝色文件夹中。所有必要的文件仍然在那里,但是Xcode正在运行main.swift
文件,而不是运行我的应用程序。我可以看到调试输出是“Hello, world!”而不是“test”。
我读过几篇教程声称,Swift Package Manager将移动我的源代码并继续像以前一样构建,但显然情况并非如此。
我的构建设置中也不再有“主界面”选项,因此我无法将“MainMenu.xib”选择为我的应用程序起始点。
这本质上与我尝试使用Swift Project Manager与我的现有项目时发生的情况相同。它会引入依赖项,但基本上会忽略我整个现有项目,并只运行“hello world”代码。
如何使用Swift Package Manager向现有项目添加依赖项而不忽略现有代码库?