Xcode 框架搜索路径-混合$(继承的)和$(项目目录)

Xcode 框架搜索路径-混合$(继承的)和$(项目目录),xcode,cocoapods,Xcode,Cocoapods,我在XCode 11.2中有一个iOS项目,它需要混合使用各种框架,有些框架可以在CoCoapod上使用,有些则不能。对于非Cocoapod框架,我将框架复制到项目文件夹的根目录中 问题在于使用框架搜索路径设置使XCode能够找到这两个路径,如下所示: $(inherited)后面的所有条目实际上都是从cocoapod继承的(没有明确指定) 如果我没有在末尾添加$(PROJECT_DIR),那么Cocoapod框架可以找到,但是我嵌入的非Cocoapod框架会出现编译器错误,它们的头文件找不到

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

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

$(inherited)后面的所有条目实际上都是从cocoapod继承的(没有明确指定)

如果我没有在末尾添加$(PROJECT_DIR),那么Cocoapod框架可以找到,但是我嵌入的非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去集成
  • 打开.xcodeproj
  • 添加非CocoaPods框架
  • pod安装
  • 打开.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(在项目“MyApp”的目标“MyApp”中)

关键是armv7架构。如果部署目标为10.x或更低版本,则此体系结构只是构建过程的一部分,而如果部署目标为11.x或更高版本,则此体系结构不是构建过程的一部分。如果您所包含的框架没有armv7体系结构(例如,如果它们是为11.0+构建的,那么XCode会给出关于找不到框架的错误消息。真正没有找到的是框架中的特定体系结构

一句话:我的问题与框架搜索路径无关。从框架搜索路径中删除$(PROJECT_DIR)似乎只是通过在链接器问题出现之前触发另一个编译时问题来解决问题


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

遗憾的是,这会产生相同的结果。当我通过将非cocoaPods框架拖入“框架、库和嵌入内容”来“添加非cocoaPods框架”时,XCode会自动将
$(PROJECT\u DIR)
添加到框架搜索路径的末尾。然后,当我运行
pod install
时,我收到警告:
target会覆盖Pods/target Support Files/Pods MyApp/MyApp.debug.xcconfig中定义的LD\u RUNPATH\u SEARCH\u path生成设置,这可能会导致CocoaPods安装出现问题。-使用$(继承的)标志,或-从目标中删除生成设置。
build会给出相同的错误。嗯,可能是路径中出现空格或其他与命令行相关的错误。通过扩展报表导航器中的命令行,您可以了解更多信息。这是一个关于报表导航器的简单但很棒的提示,@paul beusterien。这揭示了我补充的一个新答案中记录的真实问题。