避免迅速进行自动框架链接

时间:2019-01-11 20:44:01

标签: swift xcode dyld

我有一个example project,由一个主要目标(LinkerTests)和一个从属动态框架(Dynamic)组成。

如果运行项目,您将看到以下dyld二进制加载:

dyld: loaded: {DerivedDataPath}/Build/Products/Debug-iphonesimulator/Dynamic.framework/Dynamic

尽管存在以下情况,但由于import Dynamic中的AppDelegate.swift导致了该模拟二进制加载:

  1. Link Binary With Libraries构建阶段为空
  2. CLANG_MODULES_AUTOLINK设置为false

我需要实现的是避免这种自动的隐式链接。 这可能吗?预先感谢!


相关问题:Don't we need to link framework to XCode project anymore?

1 个答案:

答案 0 :(得分:4)

显然,此功能称为自动链接。 Swift编译器隐式发出其他链接器标志,这些标志链接源代码所依赖的所有模块(import Dynamic

无法完全禁用此功能。但是有一个专用的编译器标志,它允许您禁用单个框架的自动链接:swiftc -disable-autolink-framework <framework>

一些参考: https://gist.github.com/zrzka/c89705ff634ea01aebc1 https://github.com/niw/automatic_linking_tool/blob/master/README.md

我很确定您可以将-v附加到swiftc上,它将把所有基础调用作为命令输出。希望您也能看到链接器调用。

您应该使用-Xfrontend标志来获得所需的结果:

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