I have an example project consisting of a main target (LinkerTests
) and a dependent dynamic framework (Dynamic
).
If you run the project, you will see the following dyld binary load:
dyld: loaded: {DerivedDataPath}/Build/Products/Debug-iphonesimulator/Dynamic.framework/Dynamic
This dyld binary load happens due to import Dynamic
in AppDelegate.swift
despite of the following:
Link Binary With Libraries
build phase is emptyCLANG_MODULES_AUTOLINK
is set to falseWhat I need to achieve is avoiding this automatic implicit linking. Is this possible? Thanks in advance!
Related question: Don't we need to link framework to XCode project anymore?
Apparently this feature is called autolinking. Swift compiler implicitly emits additional linker flags that links in all the modules the source code depends on (import Dynamic
).
There is no way to disable this entirely. But there is a private compiler flag that allows you to disable autolinking for a single framework: swiftc -disable-autolink-framework <framework>
.
Some references: https://gist.github.com/zrzka/c89705ff634ea01aebc1 https://github.com/niw/automatic_linking_tool/blob/master/README.md
I’m pretty sure you can append -v
to swiftc
and it will print all underlying invocations as commands. Hopefully you’ll be able to see the linker invocations as well.
You should wrap the the private flag inside two -Xfrontend
flags to allow it to be used:
OTHER_SWIFT_FLAGS = "-Xfrontend -disable-autolink-framework -Xfrontend Dynamic"
For this to take effect you must still set Link Frameworks Automatically No under Apple Clang - Language - Modules.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With