使用 Swift 包管理器添加依赖项
Adding a dependency using Swift Package Manager
我正在尝试将 Socket.IO 添加到我的 Xcode 项目中。我对 Swift 包管理器很陌生(我们可以在项目中删除代码的日子是什么时候)
我创建了一个包含以下内容的 Package.swift
文件 here
import PackageDescription
let package = Package(
name: "socket.io-test",
products: [
.executable(name: "socket.io-test", targets: ["MyTarget"])
],
dependencies: [
.package(url: "https://github.com/socketio/socket.io-client-swift", .upToNextMinor(from: "14.0.0"))
],
targets: [
.target(name: "MyTarget", dependencies: ["SocketIO"], path: "./My/Target/Path/")
]
)
然后我打开我的终端并导航到包含我的项目和我的 Package.swift
文件的文件夹。 (我假设它应该在我的项目文件夹中)
然后我运行执行以下命令:
swift package resolve
这产生了以下错误:
error: manifest parse error(s): error: argument 'targets' must precede
argument 'dependencies'
targets: [ ~~~~^~~~~~~~~~
所以,按照错误给出的指示,我将 'targets' 移到了依赖项之上。
我再次 运行 命令,然后收到以下错误:
error: manifest parse error(s): error: incorrect argument label in call
(have 'name:products:targets:dependencies:', expected
'name:pkgConfig:targets:dependencies:') let package = Package(
^
由于取自 github 页面的原始示例没有这样的标签设置,我只是将我的代码更改为以下内容,每次尝试添加包管理器建议的内容(前面的一个参数到另一个,添加额外的参数):
import PackageDescription
let package = Package(
name: "socket.io-test",
pkgConfig: nil,
providers: nil,
targets: [
.target(name: "MyTarget", dependencies: ["SocketIO"], path: "./My/Target/Path/")
],
dependencies: [
.package(url: "https://github.com/socketio/socket.io-client-swift", .upToNextMinor(from: "14.0.0"))
],
swiftLanguageVersions: nil,
exclude: nil,
products: [
.executable(name: "socket.io-test", targets: ["MyTarget"])
]
)
但是,现在包管理器告诉我以下 st运行ge 错误:
error: manifest parse error(s): error: extra argument 'products' in call
products: [
^
所以现在我放弃了,因为我显然无处可去。 'products' 参数怎么不属于这里?为什么包管理器的建议没有任何作用?我确定我遗漏了一些小东西。有人可以指出我正确的方向吗?
我也查看了以下网站寻求帮助,但仍然无法正常工作。
Swift.org
https://medium.com/xcblog/apple-swift-package-manager-a-deep-dive-ebe6909a5284
希望我的问题不会太长,希望有人能抽出时间提供帮助 :)
编辑
我将代码更改为以下内容:
import PackageDescription
let package = Package(
name: "socket.io-test",
dependencies: [
.Package(url: "https://github.com/socketio/socket.io-client-swift", majorVersion: 14)
]
)
这似乎没有错误。它在我的项目文件夹中放置了一个 Package.resolved
文件。我找不到这个文件的参考,我仍然不知道在我的项目中使用 Socket.IO。
编辑 2
我继续使用 Carthage 导入框架。在 15 分钟内完成设置。由于这是与我的问题无关的不同解决方案,因此我决定将其添加为编辑而不是答案。
如果有人仍然能够回答以上问题,请随时供日后参考,我仍会对其进行测试,如果有效则接受。
您需要将此行添加到 Package.swift
的顶部
// swift-tools-version:4.2
我正在尝试将 Socket.IO 添加到我的 Xcode 项目中。我对 Swift 包管理器很陌生(我们可以在项目中删除代码的日子是什么时候)
我创建了一个包含以下内容的 Package.swift
文件 here
import PackageDescription
let package = Package(
name: "socket.io-test",
products: [
.executable(name: "socket.io-test", targets: ["MyTarget"])
],
dependencies: [
.package(url: "https://github.com/socketio/socket.io-client-swift", .upToNextMinor(from: "14.0.0"))
],
targets: [
.target(name: "MyTarget", dependencies: ["SocketIO"], path: "./My/Target/Path/")
]
)
然后我打开我的终端并导航到包含我的项目和我的 Package.swift
文件的文件夹。 (我假设它应该在我的项目文件夹中)
然后我运行执行以下命令:
swift package resolve
这产生了以下错误:
error: manifest parse error(s): error: argument 'targets' must precede argument 'dependencies' targets: [ ~~~~^~~~~~~~~~
所以,按照错误给出的指示,我将 'targets' 移到了依赖项之上。
我再次 运行 命令,然后收到以下错误:
error: manifest parse error(s): error: incorrect argument label in call (have 'name:products:targets:dependencies:', expected 'name:pkgConfig:targets:dependencies:') let package = Package( ^
由于取自 github 页面的原始示例没有这样的标签设置,我只是将我的代码更改为以下内容,每次尝试添加包管理器建议的内容(前面的一个参数到另一个,添加额外的参数):
import PackageDescription
let package = Package(
name: "socket.io-test",
pkgConfig: nil,
providers: nil,
targets: [
.target(name: "MyTarget", dependencies: ["SocketIO"], path: "./My/Target/Path/")
],
dependencies: [
.package(url: "https://github.com/socketio/socket.io-client-swift", .upToNextMinor(from: "14.0.0"))
],
swiftLanguageVersions: nil,
exclude: nil,
products: [
.executable(name: "socket.io-test", targets: ["MyTarget"])
]
)
但是,现在包管理器告诉我以下 st运行ge 错误:
error: manifest parse error(s): error: extra argument 'products' in call products: [ ^
所以现在我放弃了,因为我显然无处可去。 'products' 参数怎么不属于这里?为什么包管理器的建议没有任何作用?我确定我遗漏了一些小东西。有人可以指出我正确的方向吗?
我也查看了以下网站寻求帮助,但仍然无法正常工作。
Swift.org https://medium.com/xcblog/apple-swift-package-manager-a-deep-dive-ebe6909a5284
希望我的问题不会太长,希望有人能抽出时间提供帮助 :)
编辑
我将代码更改为以下内容:
import PackageDescription
let package = Package(
name: "socket.io-test",
dependencies: [
.Package(url: "https://github.com/socketio/socket.io-client-swift", majorVersion: 14)
]
)
这似乎没有错误。它在我的项目文件夹中放置了一个 Package.resolved
文件。我找不到这个文件的参考,我仍然不知道在我的项目中使用 Socket.IO。
编辑 2
我继续使用 Carthage 导入框架。在 15 分钟内完成设置。由于这是与我的问题无关的不同解决方案,因此我决定将其添加为编辑而不是答案。
如果有人仍然能够回答以上问题,请随时供日后参考,我仍会对其进行测试,如果有效则接受。
您需要将此行添加到 Package.swift
的顶部// swift-tools-version:4.2