为什么我的静态库会导致iOS链接器错误?

111

我在将混合语言框架连接到项目时遇到了问题。

  1. 我使用Swift和Objective-C类创建了一个框架。

  2. 主要逻辑存储在Swift文件中。例如,一个调用NSLog("Swift log was called")方法的类。

  3. Objective-C文件有一个类,其中包含一个方法,在该方法中我创建一个Swift类的实例并调用Swift-log方法。

  4. 我将这个框架与我的Objective-C项目链接起来,我可以在这个项目中调用所有我需要的东西,但是当我想要构建这个项目时,我会收到错误信息 linker command failed with exit code 1 (use -v to see invocation)

    还有警告:

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'

我也看到了通过导入空的Swift文件来解决问题的方法,但这会使项目中出现无用的文件。


@PhilippHolly 我需要一个不包含空文件的解决方案。 - Yaroslav Skachkov
很抱歉,我目前还没有找到任何解决方案。如果你找到了什么,请告诉我。 - phips28
你好,这个有什么解决方案吗? - Akila Devinda
21个回答

6
在一个React Native项目中对我起作用的是将$(inherited)移动到Build Settings -> Library Search Paths列表的底部。

enter image description here


也适用于我。你可以告诉我们为什么它有效吗? - meowmeowmeow
我不知道,也许一个iOS开发者可以回答这个问题。 - B. Mohammad

3

当我在Xcode首选项»组件»工具链中配置了Swift 5.0快照时,意外编译项目时出现了相同的错误。


我故意更改了它...有什么办法可以在arm64上编译它(在模拟器上运行良好)? - Kirow

2
我在安装Lottie-react-native后遇到了这个错误?只有当添加Lottie包时才会出现此问题。这是我的解决方案:
yarn add lottie-react-native
yarn add lottie-ios@3.2.3

接下来必须运行:

pod installpod update

我正在使用:

"lottie-ios": "3.2.3",
"lottie-react-native": "^5.0.1",
"react": "17.0.2",
"react-native": "0.67.3"

1

1

我是一名Android程序员。 花了一段时间才理解他们在做什么。 我当前使用的是Xcode 13.2.1和Flutter 1这个可怕的组合。 请在“Build settings > Search paths > Library search paths”中进行编辑,以便xcode将“Enter”视为“结束”。 我将更改以下内容:

从:

$(inherited) $(PROJECT_DIR)/Flutter

到:

$(inherited) $(PROJECT_DIR)/Flutter $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)

就这些了, 希望对一些人有所帮助。


1
XCode 11.3 beta,Swift 5.0
我只是在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

0

如果您在使用Xcode 11 beta 4与Carthage组合时遇到此错误,请参考以下解决方法:

https://github.com/Carthage/Carthage/issues/2825

基本上,它包括创建一个带有修复内容的xcconfig文件,并将其注入到每个构建中。

0

适用于Xcode 12.2

使用Xcode创建一个空的Swift文件,例如命名为Void.swift,Xcode会自动解决所有问题。


0
我在我们的项目中遇到了这个问题,问题是在我们的xcode项目文件中有一些孤立的对lottie的引用。用文本编辑器打开它并删除这些引用解决了我的问题。

0

我只是忘记将新的框架添加到我的pod文件中 :)

 target 'Data' do
inherit! :search_paths
 pod 'AlamofireObjectMapper', '~> 5.2'

结束


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接