If you're referring to @ciauri's project above, there's no evidence of that in the build log. What's happening is:
-
The
Packagetarget (Swift package target) is built, producing a relocatable object file (instead of a static library) (clang -r ... -o Package.o). -
The
StaticLibtarget (Xcode static library target) is built, producing a static library. The file list passed tolibtoolcontains the.ofile from its own.swiftsource and thePackage.ofrom the dependency. But,Package.ois also passed separately on the command line outside of the file list.libtooldoesn't deduplicate these inputs, and even emits a warning about the conflict:warning same member name (Package.o) in output file used for input files: /path/to/Build/Products/Debug-iphonesimulator/Package.o and: /path/to/Build/Products/Debug-iphonesimulator/Package.o (due to use of basename, truncation, blank padding or duplicate input files) -
The App target (Xcode app target) is built. The linker takes the object files for the target's own
.swiftfiles as inputs in the file list, and then the command line also includeslibStaticLib.a. It does not separately containPackage.ofrom step 1.
There's another way that we can verify that -ObjC is causing the problem hereājust remove it from the App target. If we do that, the App links fine, because there are no references to symbols from Package in App. Even if we have App reference a symbol in Package, it still works without -ObjC because the linker stops looking once it finds the first object file in libStaticLib.a that defines the symbols it's looking for. Since the two copies of Package.o are the same, it will never find symbols in the second one that it hasn't already found in the first one, so the duplicate never gets pulled in unless you force it.