【问题标题】:Vapor project not building/running with Swift 4 and Xcode 9Vapor 项目未使用 Swift 4 和 Xcode 9 构建/运行
【发布时间】:2018-04-24 22:11:04
【问题描述】:

我已经安装了最新版本的 Xcode 9,并且现在已经用 brew 重新安装了几次 vapor,但是每当我尝试构建/运行/更新项目时,我仍然收到以下错误。

这就是我正在使用的东西

1.) Vapor Toolbox: 3.1.2

2.) Apple Swift version 4.0 (swiftlang-900.0.43 clang-900.0.22.8)
    Target: x86_64-apple-macosx10.9

3.) Xcode 9.0
    Build version 9M136h
Error: Could not generate Xcode project: error: manifest parse error(s):
/var/folder/60/n3ldjzgs5vsg06v17_1yy44h0000gn/T/TemporaryFile.VwrbJo.swift:41:5
: error: argument 'targets' must preceed argument 'dependencies'
    targets" [
    ^
error: The product dependency 'Vapor' was not found.
error: The product dependency 'FluentProvider' was not found.
error: The product dependency 'Testing' was not found.

这是我的 Package.swift 文件。查看我最初的错误,我确实尝试切换它们在文件中出现的“目标”和“依赖项”顺序。这没有解决任何问题并产生以下错误消息:error: argument 'dependencies' must precede argument 'targets'

Package.swift

let package = Package(
    name: "test",
    products: [
        .library(name: "App", targets: ["App"]),
        .executable(name: "Run", targets: ["Run"])
    ],
    dependencies: [
        .package(url: "https://github.com/vapor/vapor.git", .upToNextMajor(from: "2.1.0")),
        .package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.2.0")),
    ],
    targets: [
        .target(
            name: "App",
            dependencies: ["Vapor", "FluentProvider"],
            exclude: [
                    "Config",
                    "Public",
                    "Resources",
                    ]
        ),
        .target(name: "Run", dependencies: ["App"]),
        .testTarget(name: "AppTests", dependencies: ["App", "Testing"])
    ]
)

【问题讨论】:

  • 你能告诉我们你的 Package.swift 文件吗?那里好像出了点问题。
  • @MauranMuthiah :感谢您查看我的问题,我已经编辑了我的问题以包含我的 Package.swift 文件的屏幕截图。
  • 为什么要分享截图而不是实际代码?
  • @AndyIbanez :因为它实际上是一个空白的入门项目,所以没有有趣的代码可以看。我只是想表明 Package.swift 文件是正常的。我猜这个问题与我的环境设置有关。
  • 一般来说,你应该总是发布代码。如果我想编辑某些东西并告诉您尝试一下,我将无法做到。除了这种情况,我会交换目标和依赖关系,看看是否能解决问题。

标签: swift vapor


【解决方案1】:

Xcode 12 / Swift 5.3 更新

vapor 现在是homebrew/core 的一部分。来源:githubhomebrew-core/Formula/vapor.rb.

##### If applicable, remove the obsolete 'vapor/tap' #####
## List current taps:
brew tap
# homebrew/core
# vapor/tap
## Remove tap:
brew untap vapor/tap

#### Install current version of vapor #####
brew install vapor
brew upgrade vapor

Xcode 9 / Swift 4

  1. 双重检查版本:“最新版本”至少是 Xcode 9.1 (9B55) 和 Apple Swift 4.0.2 (swiftlang-900.0.69.1 clang- 900.0.38)

  2. 验证Packages.swift 中的第一行是// swift-tools-version:4.0如果没有swift-tools-version 行,Packages.swift 可以作为 swift-tools-version 3 处理。会导致错误* p>

cd _PROJECT_PATH_
swift package tools-version
# if not 4.0.0, then …
swift package tools-version --set-current

一个例子,Package.swift 如下所示。请参阅Swift Package Manager Manifest API Redesignswift-package-manager Usage Documentation 了解更多信息。

// swift-tools-version:4.0
// The swift-tools-version declares the minimum version of Swift
// required to build this package. 
// Syntax: '// swift-tools-version:<specifier>' on the 1st line

import PackageDescription

let package = Package(
    name: "test",
    products: [
        .library(name: "App", targets: ["App"]),
        .executable(name: "Run", targets: ["Run"])
    ],
    dependencies: [
        .package(url: "https://github.com/vapor/vapor.git", .upToNextMajor(from: "2.3.0")),
        .package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.3.0")),
    ],
    targets: [
        .target(
            name: "App",
            dependencies: ["Vapor", "FluentProvider"],
            exclude: [
                    "Config",
                    "Public",
                    "Resources",
                    ]
        ),
        .target(name: "Run", dependencies: ["App"]),
        .testTarget(name: "AppTests", dependencies: ["App", "Testing"])
    ]
)
  1. 复查
cd _PROJECT_PATH_
swift package tools-version
# should be 4.0.0

vapor clean
vapor update
vapor --version

# Vapor Toolbox: 3.1.2
# Vapor Framework: 2.3.0
  1. 尝试重新构建。

更多关于使用 Xcode 9 和 Swift 4 与 Vapor 2 的说明已发布在 StackOverflow here

GitHub 存储库Vapor Examples Lab 有几个示例项目已迁移到 Vapor 2 和 Swift 4。

【讨论】:

  • 谢谢!但是评论 (// swift-tools-version:4.0) 是如何影响执行的呢?我错过了这一行,添加它解决了我遇到的部署错误。如果 Vapor 的实现在评论中看起来是一个值,那它就很麻烦了……这将是我最后想到的……影响执行的评论。
  • @balazs630 // swift-tools-version:&lt;specifier&gt; 已于 2017 年 6 月添加为 Swift Package Manager Manifest API 的标准部分。一些相关信息和链接现已添加到此答案的第 2 步。
猜你喜欢
  • 1970-01-01
  • 2017-11-30
  • 2017-11-07
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 2017-03-12
相关资源
最近更新 更多