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?