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

如何引用在Xcode中使用不同配置构建的依赖项目?,xcode,xcodebuild,build-dependencies,Xcode,Xcodebuild,Build Dependencies,我有两个Xcode项目:Super和SubSuper具有自定义配置:EnterpriseSub只有默认配置:Debug和ReleaseSuper对Sub具有目标依赖关系。当我使用Enterprise配置构建Super时,Sub使用默认配置构建:Release。这将产生以下层次结构: Build |-Products |-Enterprise-iphoneos |-Super.app |-Release-iphoneos |-libSub.a |-Sub

我有两个Xcode项目:
Super
Sub
Super
具有自定义配置:
Enterprise
Sub
只有默认配置:
Debug
Release
Super
Sub
具有目标依赖关系。当我使用
Enterprise
配置构建
Super
时,
Sub
使用默认配置构建:
Release
。这将产生以下层次结构:

Build
|-Products
  |-Enterprise-iphoneos
    |-Super.app
  |-Release-iphoneos
    |-libSub.a
    |-Sub
      |-Sub.h

Clang无法生成,因为
libSub.a
Sub/Sub.h
通常与
Super.app
位于同一目录中,但位于不同的目录中,因为
Sub
是使用
Release
配置而不是
Enterprise
生成的。我控制这两个项目,因此我可以轻松地将
企业
配置添加到
,但我觉得必须有一个神奇的咒语才能使这项工作正常进行。

我通过在父项目中使用Xcode配置文件(通常是您的应用程序)解决了完全相同的问题

以下是我采取的步骤:

  • 通过新建>其他>配置文件在Xcode中创建基本配置文件

  • 编写您的基本
    xcconfig
    文件,我的看起来有点像这样:

    /// Configure Search Paths
    HEADER_SEARCH_PATHS = "$(BUILT_PRODUCTS_DIR)/include" "$(BUILT_PRODUCTS_DIR)/usr/local/include"
    LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../Externals/Libraries/GoogleAnalytics"
    
    /// Linker flags
    OTHER_LDFLAGS=-ObjC -all_load
    
    #include "BaseConfig.xcconfig"
    
    /// Ad Hoc search paths
    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"
    
  • 这里需要注意的是,
    $(build\u PRODUCTS\u DIR)
    是以下内容的串联:

    $(BUILD_DIR)/$(CONFIGURATION)-$(PLATFORM_NAME)
    
  • 为自定义配置编写专用配置。我创建了一个临时配置,它复制了版本,因此我的搜索路径现在如下所示:

    /// Configure Search Paths
    HEADER_SEARCH_PATHS = "$(BUILT_PRODUCTS_DIR)/include" "$(BUILT_PRODUCTS_DIR)/usr/local/include"
    LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../Externals/Libraries/GoogleAnalytics"
    
    /// Linker flags
    OTHER_LDFLAGS=-ObjC -all_load
    
    #include "BaseConfig.xcconfig"
    
    /// Ad Hoc search paths
    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"
    

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

    我的一个应用程序中也有类似问题。在Xcode 12.4中,我可以通过将额外配置(我称之为测试临时配置)的系统框架搜索路径设置为
    $(BUILD\u DIR)/Release$(EFFECTIVE\u PLATFORM\u NAME)
    来解决这个问题

    通过选择目标,然后选择“生成设置”选项卡,可以在项目中找到此设置。我建议搜索“系统框架”来找到它。添加路径后,Xcode会将其转换为系统上的实际路径,如我的屏幕截图所示。这也适用于归档


    您找到解决方案了吗?我一直在处理同样的问题。不仅仅是我自己的图书馆项目。谢谢!我只是希望有一种更干净的方法。不幸的是,我认为这在归档方面不起作用!啊!