Avoid automatic framework linking in swift
Asked Answered
D

1

11

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?

Disenthral answered 11/1, 2019 at 20:44 Comment(0)
I
8

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.

Inceptive answered 13/1, 2019 at 16:18 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.