【问题标题】:Framework Search Paths - Mixing $(inherited) with $(PROJECT_DIR)框架搜索路径 - 混合 $(inherited) 和 $(PROJECT_DIR)
【发布时间】:2020-07-21 20:28:17
【问题描述】:

我在 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 在这两个地方找到框架?

【问题讨论】:

    标签: xcode cocoapods


    【解决方案1】:

    这是一种方法:

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

    【讨论】:

    • 遗憾的是,这会产生相同的结果。当我通过将非 cocoaPods 框架拖放到“框架、库和嵌入式内容”中来“添加非 cocoaPods 框架”时,XCode 会自动将 $(PROJECT_DIR) 添加到框架搜索路径的末尾。然后当我运行pod install 时,我收到警告:target overrides the LD_RUNPATH_SEARCH_PATHS build setting defined in Pods/Target Support Files/Pods-MyApp/MyApp.debug.xcconfig This can lead to problems with the CocoaPods installation. - Use the $(inherited) flag, or - Remove the build settings from the target. Build 给出了同样的错误。
    • 嗯,可能是路径中的空格或其他与命令行相关的东西。您可以通过在报告导航器中展开命令行来了解更多信息。
    • 这是一个关于报告导航器的简单但很棒的提示,@paul-beusterien。这揭示了我添加的新答案中记录的真正问题。
    【解决方案2】:

    问题是我尝试添加的 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,然后一切都可以正常构建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 2013-02-26
      • 2017-09-13
      • 1970-01-01
      相关资源
      最近更新 更多