如何在Xcode中引用使用不同配置构建的依赖项目?

3
我有两个Xcode项目:SuperSubSuper具有自定义配置:EnterpriseSub只有默认配置:DebugReleaseSuperSub有目标依赖。当我使用Enterprise配置构建Super时,Sub将使用其默认配置Release进行构建。这会产生以下层次结构:
Build
|-Products
  |-Enterprise-iphoneos
    |-Super.app
  |-Release-iphoneos
    |-libSub.a
    |-Sub
      |-Sub.h

Clang编译失败,因为libSub.aSub/Sub.h通常在与Super.app相同的目录中,但现在在不同的目录中,这是因为Sub使用Release配置而不是Enterprise。我控制着这两个项目,所以我可以很容易地向Sub添加一个Enterprise配置,但我觉得一定有一种神奇的Xcode构建设置的咒语可以解决这个问题。

你找到解决方案了吗?我一直在处理同样的问题。不仅是我的库项目,还有其他的。 - Daniel Thorpe
2个回答

0

我在我的一个应用程序中遇到了类似的问题。在 Xcode 12.4 中,我通过将我称之为“Ad Hoc for Test”的额外配置的系统框架搜索路径设置为$(BUILD_DIR)/Release$(EFFECTIVE_PLATFORM_NAME),成功地解决了它。

您可以在项目中通过选择目标,然后选择“Build Settings”选项卡来找到此设置。我建议搜索“System Framework”以查找它。添加路径后,Xcode将将其转换为您系统上的实际路径,如我的截图所示。这也适用于存档。

Build Settings Example


0

我在我的主项目中使用Xcode配置文件成功解决了完全相同的问题 - 通常是您的应用程序。

以下是我采取的步骤:

  1. 通过选择 New > Other > Configuration File 在 Xcode 中创建一个基础配置文件。

  2. 编写你的基础xcconfig文件,我的看起来有点像这样:

    /// 配置搜索路径
    HEADER_SEARCH_PATHS = "$(BUILT_PRODUCTS_DIR)/include" "$(BUILT_PRODUCTS_DIR)/usr/local/include"
    LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../Externals/Libraries/GoogleAnalytics"
    
    /// 链接器标志
    OTHER_LDFLAGS=-ObjC -all_load
    
  3. 需要注意的是,$(BUILT_PRODUCTS_DIR) 是以下内容的连接:

    $(BUILD_DIR)/$(CONFIGURATION)-$(PLATFORM_NAME)
    
  4. 为自定义配置编写一个专门的配置。我创建了一个 Ad Hoc 配置,复制了 Release 配置,因此我的搜索路径现在是这样的:

    #include "BaseConfig.xcconfig"
    
    /// Ad Hoc 搜索路径
    HEADER_SEARCH_PATHS = "$(BUILD_DIR)/Release-$(PLATFORM_NAME)/include" "$(BUILD_DIR)/Release-$(PLATFORM_NAME)/usr/local/include"
    LIBRARY_SEARCH_PATHS = "$(BUILD_DIR)/Release-$(PLATFORM_NAME)" "$(SRCROOT)/../Externals/Sources/GoogleAnalytics"
    

然后在您的应用程序项目的“信息”选项卡中选择配置,以使用基本配置进行调试和发布,然后选择您的自定义配置的特殊配置。


谢谢!我只希望有一种更简洁的方式。 - Heath Borders
不幸的是,我认为这在归档方面不起作用!烦死了! - Daniel Thorpe

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