Vapor项目没有使用Swift 4和Xcode 9构建/运行

Nat*_*ega 5 swift vapor

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

这是我正在使用的

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
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)

这是我的Package.swift文件.看看我原来的错误,我确实尝试切换它们出现在文件中的'targets'和'dependencies'顺序.这没有解决任何问题,并产生以下错误消息: 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"])
    ]
)
Run Code Online (Sandbox Code Playgroud)

l -*_*c l 16

  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.*处理,这将导致错误.

cd _PROJECT_PATH_
swift package tools-version
# if not 4.0.0, then …
swift package tools-version --set-current
Run Code Online (Sandbox Code Playgroud)

例如,Package.swift如下所示.有关其他信息,请参阅Swift Package Manager Manifest API重新设计swift-package-manager使用文档.

// 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"])
    ]
)
Run Code Online (Sandbox Code Playgroud)
  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
Run Code Online (Sandbox Code Playgroud)
  1. 尝试再次构建.

更多消息均发布在计算器上这里使用的Xcode 9和斯威夫特4蒸汽2.

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