避免在swift中自动框架链接

Tim*_*Tim 9 xcode dyld swift

我有一个示例项目,包括一个主目标(LinkerTests)和一个依赖动态框架(Dynamic).

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

dyld: loaded: {DerivedDataPath}/Build/Products/Debug-iphonesimulator/Dynamic.framework/Dynamic
Run Code Online (Sandbox Code Playgroud)

尽管存在以下情况import Dynamic,AppDelegate.swift但仍会发生此dyld二进制加载:

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

我需要实现的是避免这种自动隐式链接.这可能吗?提前致谢!


相关问题:我们不需要再将框架链接到XCode项目了吗?

bee*_*fon 6

显然,此功能称为自动链接。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

我很确定你可以附加-vswiftc,它会将所有底层调用打印为命令。希望您也能看到链接器调用。

您应该将私有标志包装在两个-Xfrontend标志中以允许使用它:

OTHER_SWIFT_FLAGS = "-Xfrontend -disable-autolink-framework -Xfrontend Dynamic"
Run Code Online (Sandbox Code Playgroud)

要使其生效,您仍必须在 Apple Clang - Language - Modules 下自动设置Link Frameworks No。