So I'm running into a bit of a tricky situation including a system library with SPM.
Basically, I want to include GLFW as a dependency only when building for macOS or linux, but to exclude it when building for iOS, because the compilation fails when linking.
What I have tried so far is to include GLFW as a dependency, and then conditionally skip the import statements when building for iOS. So in other words, my Package.swift looks like this:
let package = Package( name: "Foo", products: [ // Products define the executables and libraries produced by a package, and make them visible to other packages. .library( name: "Foo", targets: ["Foo"] ), ], targets: [ .target( name: "Foo", dependencies: [ "CGLFW3" ] ), .systemLibrary( name: "CGLFW3", pkgConfig: "glfw3", providers: [ .brew(["glfw"]), .apt(["libglfw3"]) ] ), ...
And then in my code, I always do imports like this:
#if !os(iOS) import CGLFW3 #endif
However, when building for simulator, I still encounter this error:
ld: building for iOS Simulator, but linking in dylib built for macOS, file '/opt/homebrew/Cellar/glfw/3.3.7/lib/libglfw.dylib' for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
So I assume just having the dependency declared in
Package.swift is enough for SPM to attempt to link the library.
Is there any way to avoid this?