【发布时间】:2018-07-27 23:43:10
【问题描述】:
我一直在使用 Cocoapods 来管理我的 Swift 项目的依赖项。我遇到了this package,它没有在 Cocoapods 中列出。相反,它建议使用 Swift 包管理器。然而,每当我尝试使用 Swift 包管理器做任何事情时,它最终都会彻底破坏我的整个项目。
所以,为了弄清楚如何实际使用 Swift 包管理器,我正在一个测试项目中使用它。
这是我尝试过的:
- 从 Xcode 创建一个新项目
文件 -> 新建 -> 项目 -> Cocoa 应用程序
产品名称:basic-ssh-test
这会创建一个基本应用程序,当我点击“运行”时它会加载一个空白窗口。只是为了好玩,我在AppDelegate 的applicationDidFinishLaunching 函数中添加了print("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,其中有一个 swift 文件 main.swift 和 print("Hello, world!")。
我真正感兴趣的代码现在位于名为basic-ssh-test 的蓝色文件夹中。所有必要的文件仍然在那里,但 Xcode 没有运行我的应用程序,而是运行main.swift 文件。我可以说是因为调试输出是“Hello, world!”而不是“测试”。
我已经阅读了一些教程,声称 Swift 包管理器将移动我的源文件并继续像以前一样构建,但显然不是这样。
我的构建设置中也不再有“主界面”选项,因此我无法选择“MainMenu.xib”作为我的应用程序起点。
这与我尝试在现有项目中使用 Swift 项目管理器时发生的情况基本相同。它引入了依赖项,但它基本上忽略了我的整个现有项目,只运行“hello world”代码。
如何使用 Swift 包管理器在不忽略现有代码库的情况下向现有项目添加依赖项?
【问题讨论】:
-
你需要创建一个新的“构建目标”并配置好
-
谢谢@MatthewLuiHK。我创建了一个新的构建目标,但它具有与现有构建目标相同的选项,即构建设置中没有“主界面”选项。如何设置主界面?
-
你的目标应该是“应用”类型