Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do I get iOS linker errors with my static libraries?

I have a problem with linking my mixed language framework to a project.

  1. I create a framework with Swift and Objective-C classes.

  2. The main logic was stored in the Swift file. For example the class with a method that calls NSLog("Swift log was called").

  3. Objective-C file has a class that has a method in which I create an instance of Swift class and call Swift-log method.

  4. I link this framework with my Objective-C project, I can call all that I need in this project, but when I want to build this project I receive error linker command failed with exit code 1 (use -v to see invocation)

    And warnings:

ld: warning: Could not find auto-linked library 'swiftFoundation'
ld: warning: Could not find auto-linked library 'swiftDarwin'
ld: warning: Could not find auto-linked library 'swiftCoreFoundation'
ld: warning: Could not find auto-linked library 'swiftCore'
ld: warning: Could not find auto-linked library 'swiftCoreGraphics'
ld: warning: Could not find auto-linked library 'swiftObjectiveC'
ld: warning: Could not find auto-linked library 'swiftDispatch'
ld: warning: Could not find auto-linked library 'swiftSwiftOnoneSupport'

I also saw the solution with importing empty Swift-file, but it necessary to make a project without any trash.

like image 699
Yaroslav Skachkov Avatar asked Sep 27 '18 11:09

Yaroslav Skachkov


3 Answers

  1. Open ios/YourAppName.xcodeproj in Xcode
  2. Right-click on Your App Name in the Project Navigator on the left, and click New File…
  3. Create a single empty Swift file to the project (make sure that Your App Name target is selected when adding)
  4. when Xcode asks, press Create Bridging Header and do not remove Swift file then. re-run your build.

This should fix the problem

like image 188
Hussam Kurd Avatar answered Oct 13 '22 06:10

Hussam Kurd


In my case it was a React-Native project after adding a Swift Pods library. Maybe just the step 2 can work:

  1. Adding a new Swift file and a Brigde header:

1) File -> New -> File <code>File -> New -> File</code>

2) Select Swift File Select <code>Swift File</code>

3) Confirm Create Bridging Header enter image description here

  1. Go to Build Settings and set Always Embed Swift Standard Libraries to YES Always Embed Swift Standard Libraries
like image 98
AlVelig Avatar answered Oct 13 '22 07:10

AlVelig


Apparently for pure objective-c projects you will need to add this $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) to the library search paths of your target. This worked for me when I was including a library written in swift to a project in objective-c

like image 92
Nathan Avatar answered Oct 13 '22 06:10

Nathan