框架搜索路径 - 混合 $(inherited) 和 $(PROJECT_DIR)

Framework Search Paths - Mixing $(inherited) with $(PROJECT_DIR)

我在 XCode 11.2 中有一个 iOS 项目,它需要混合框架,其中一些在 Cocoapods 上可用,而另一些则不可用。对于非 Cocoapod 框架,我将框架复制到项目文件夹的根目录。

问题在于让 XCode 能够使用框架搜索路径设置找到两者,如下所示:

$(inherited) 之后的所有条目实际上都是从 Cocoapods 继承的条目(这些未明确指定)。

如果我不在末尾添加 $(PROJECT_DIR) 则 Cococapod 框架可以正常工作,但我的嵌入式非 Cocoapod 框架会出现编译错误,即找不到它们的头文件。

如果我在末尾添加 $(PROJECT_DIR) ,则找不到 Cocoapod 框架,并且我会收到如下构建错误:

ld: warning: directory not found for option '-F/Users/dyoung/Library/Developer/Xcode/DerivedData/MyApp-acdmyjbbrpbhlkfiyypetovwacrz/Build/Products/Debug-iphoneos/AWSAuthCore'
...
ld: framework not found AWSAuthCore

为什么?如何让 XCode 在这两个地方找到框架?

这是一种方法:

  • pod deintegrate
  • 打开.xcodeproj
  • 添加非 CocoaPods 框架。
  • pod install
  • 打开.xcworkspace

问题是我尝试添加的 CocoaPods 框架仅针对 iOS 11+ 构建,但我非常老的项目的部署目标是 iOS 8.4。

按照@paul-beusterien 的建议查看报告导航器中的错误详细信息非常重要。我发现了这个:

Ld /Users/dyoung/Library/Developer/Xcode/DerivedData/MyApp-acdmyjbbrpbhlkfiyypetovwacrz/Build/Intermediates.noindex/MyApp.build/Debug-iphoneos/MyApp.build/Objects-normal/armv7/Binary/MyApp normal armv7 (in target 'MyApp' from project 'MyApp')

这里的关键是 armv7 架构。如果您的部署目标为 10.x 或更早版本,则此体系结构只是构建过程的一部分,但如果您有 11.x 或更早版本,则此架构不是构建过程的一部分。如果您包含的框架没有 armv7 架构(例如,如果它们是为 11.0+ 构建的),XCode 会给出关于未找到框架的误导性错误消息。真正没有找到的是框架内部的特定架构。

底线:我的问题与框架搜索路径无关。从框架搜索路径中删除 $(PROJECT_DIR) 似乎只是通过在它到达链接器问题之前触发不同的编译时问题来解决问题。

这种情况下的解决方案是我必须将我的部署目标更改为 11.0,然后一切都会正确构建。