Исполняемое приложение Swift Package Manager, установите цель развертывания - PullRequest
0 голосов
/ 15 февраля 2019

Я использую Swift Package Manager для создания исполняемого файла macOS.Когда я использую вещи, которые недоступны во всех версиях macOS, я получаю ошибки компиляции.Два больших примера: URL(fileURLWithPath: filePath, relativeTo: directoryToSearch) и url.hasDirectoryPath.

При сборке с swift build я получаю error: 'init(fileURLWithPath:relativeTo:)' is only available on OS X 10.11 or newer ошибок.Меня не волнуют старые версии ОС, так как это всего лишь личный инструмент.Как я могу установить целевое значение развертывания 10,14, чтобы мне не нужно было разбрасывать проверки по всему моему коду?

Я нашел https://hirschmann.io/swift-package-manager/, в котором говорится об этой проблеме.Однако это решение - создать файл xcconfig с установленной целью развертывания и использовать swift package generate-xcodeproj --xcconfig-overrides ./main.xcconfig, чтобы применить его к сгенерированному проекту XCode.Хотя он работает, он работает только для проекта XCode, поэтому, если я просто хочу сделать swift build, чтобы получить автономный исполняемый файл для использования вне XCode, я не могу.

Мой файл пакета былавтоматически генерируется swift package init --type executable и не был изменен.

// swift-tools-version:4.2
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
    name: "swift_converter",
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        // .package(url: /* package url */, from: "1.0.0"),
    ],
    targets: [
        // Targets are the basic building blocks of a package. A target can define a module or a test suite.
        // Targets can depend on other targets in this package, and on products in packages which this package depends on.
        .target(
            name: "swift_converter",
            dependencies: []),
        .testTarget(
            name: "swift_converterTests",
            dependencies: ["swift_converter"]),
    ]
)

1 Ответ

0 голосов
/ 15 февраля 2019

Это может не помочь вам прямо сейчас, но грядущая версия Swift 5.0 будет включать возможность указать цель развертывания в манифесте пакета , используя такой синтаксис:

...
platforms: [
   .macOS(.v10_13), .iOS(.v12),
],
...

(То же самое верно для некоторых других общих параметров сборки .)

До этого вы можете переопределить цель развертывания по умолчанию с помощью аргументов командной строки, например:

$ swift build -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.14"

Вам придется включать эти аргументы в каждый вызов swift build, swift run, swift test.

...