问题
I have a problem with linking my mixed language framework to a project.
1) I create framework with Swift and Objective-C classes.
2) Main logic was stored in Swift file. For example the class with method that calls NSLog("Swift log was called").
3) Objective-C file has class that has 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 what 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 project without any trash.
回答1:
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
回答2:
- Open ios/YourAppName.xcodeproj in Xcode
- Right-click on Your App Name in the Project Navigator on the left, and click New File…
- Create a single empty Swift file to the project (make sure that Your App Name target is selected when adding)
- when Xcode asks, press Create Bridging Header and do not remove Swift file then. re-run your build.
This should fix the problem
回答3:
In my case it was a React-Native project after adding a Swift Pods library. Maybe just the step 2 can work:
- Adding a new Swift file and a Brigde header:
1) File -> New -> File
2) Select Swift File
3) Confirm Create Bridging Header
- Go to
Build Settings
and setAlways Embed Swift Standard Libraries
toYES
回答4:
For XCode 11 beta 4 Library Search Paths should be:
$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)
回答5:
Try this workaround https://stackoverflow.com/a/50495316/1658268
Basically just add a dummy swift file in your project, and re-run your build.
回答6:
I've got the same errors when accidentally compiling a project with a Swift 5.0 Snapshot configured in the Xcode preferences » Components » Toolchain.
回答7:
In case you encounter this error while using Xcode 11 beta 4 in combination with carthage see this workaround:
https://github.com/Carthage/Carthage/issues/2825
Basically it consists of creating a xcconfig with the fixes and inject these into each build.
回答8:
XCode 11.3 beta, Swift 5.0
I just add my targets to the podfile:
platform :ios, '9.0'
use_frameworks!
inhibit_all_warnings!
def shared_pods
# Pods for NamaIOS
pod 'Alamofire'
pod 'RxSwift'
end
target 'MyApp' do
use_frameworks!
shared_pods
end
target 'MyApp-Test' do
use_frameworks!
shared_pods
end
target 'MyApp-Development' do
use_frameworks!
shared_pods
end
回答9:
If your Xcode version is >=12.2
Go to
BuildSettings -> Linking -> runpath search path and add
/usr/lib/swift
as your 1st argument like this enter image description here
来源:https://stackoverflow.com/questions/52536380/why-linker-link-static-libraries-with-errors-ios