Estoy usando Swift Package Manager para crear un ejecutable de macOS. Cuando uso cosas que no están disponibles en todas las versiones de macOS, obtengo errores de compilación. Dos grandes ejemplos son URL(fileURLWithPath: filePath, relativeTo: directoryToSearch) y url.hasDirectoryPath .
Cuando construyo con swift build error: 'init(fileURLWithPath:relativeTo:)' is only available on OS X 10.11 or newer . No me importa ninguna versión anterior del sistema operativo, ya que es solo una herramienta personal. ¿Cómo puedo configurar el objetivo de implementación para que sea 10.14 para no tener que esparcir cheques por todo mi código?
Encontré https://hirschmann.io/swift-package-manager/ que habla sobre este problema. Sin embargo, su solución es crear un archivo xcconfig con el conjunto de objetivos de implementación y usar swift package generate-xcodeproj --xcconfig-overrides ./main.xcconfig para aplicarlo al proyecto Xcode generado. Si bien funciona, solo funciona para el proyecto Xcode, por lo que si solo quiero hacer swift build para obtener el ejecutable independiente para usar fuera de Xcode, entonces no puedo.
El archivo de mi paquete fue generado automáticamente por swift package init --type executable y no ha sido modificado.
// 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"]), ] )Es posible que esto no lo ayude en este momento, pero el próximo Swift 5.0 incluirá la capacidad de especificar el objetivo de implementación en el manifiesto del paquete , usando una sintaxis como esta:
... platforms: [ .macOS(.v10_13), .iOS(.v12), ], ...(Lo mismo es cierto para algunas otras configuraciones de compilación comunes ).
Hasta entonces, puede anular el destino de implementación predeterminado a través de argumentos de línea de comando como este:
$ swift build -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.14" Tendrá que incluir estos argumentos en cada llamada a swift build , swift run , swift test .