【问题标题】:Adding a dependency using Swift Package Manager使用 Swift 包管理器添加依赖项
【发布时间】:2019-01-29 17:30:48
【问题描述】:

我正在尝试将 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

这产生了以下错误:

错误:清单解析错误:错误:参数“目标”必须在前面 论据“依赖” 目标:[~~~~^~~~~~~~~~

所以,按照错误给出的指示,我将我的“目标”移到依赖项之上。

我再次运行命令,然后收到以下错误:

错误:清单解析错误:错误:调用中的参数标签不正确 (有'名称:产品:目标:依赖:',预期 'name:pkgConfig:targets:dependencies:') 让 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"])
    ]
)

但是,现在包管理器告诉我以下奇怪的错误:

错误:清单解析错误:错误:调用中的额外参数“产品” 产品: [ ^

所以现在我放弃了,因为我显然一事无成。 “产品”论点怎么可能不属于这里?为什么包管理器没有任何建议?我确定我错过了一些小东西。有人可以指出我正确的方向吗?

我还查看了以下网站寻求帮助,但仍然无法让我的工作。

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分钟就搞定了。由于这是与我的问题无关的不同解决方案,因此我决定将其添加为编辑而不是答案。

如果有人仍然能够回答上述问题,请随时参考,我仍然会测试它,如果它有效,请接受。

【问题讨论】:

  • 我相信 SPM 在 Xcode 上的表现还不是很好。如果您想将 Carthage 或 CocoaPods 与您的 iOS 项目集成,我个人会使用它。
  • 谢谢,在挣扎了大半天之后,我想了很多。我安装了 Carthage,将该行添加到 Cartfile 并在大约 15 分钟内将其导入。你会认为 Apple 的某些东西与 Xcode 配合得更好。

标签: ios swift package-managers


【解决方案1】:

您需要将此行添加到 Package.swift 的顶部

// swift-tools-version:4.2

【讨论】:

  • +1。请注意,您应该使用您的 Xcode 和项目版本支持的当前 Swift 工具版本以避免构建错误。
猜你喜欢
  • 2016-03-20
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2017-05-15
  • 2020-08-11
  • 2022-08-12
  • 2018-09-23
  • 2021-04-28
相关资源
最近更新 更多