Avoid automatic framework linking in swift

强颜欢笑 提交于 2019-12-08 16:22:47

问题


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:

  1. Link Binary With Libraries build phase is empty
  2. CLANG_MODULES_AUTOLINK is set to false

What 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?


回答1:


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 use a -Xfrontend flag to achieve the desired results:

OTHER_SWIFT_FLAGS = "-Xfrontend -disable-autolink-framework -Xfrontend Dynamic"


来源:https://stackoverflow.com/questions/54153785/avoid-automatic-framework-linking-in-swift

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!