ios - 具有多个 .xcconfig 文件和 cocoapods 的复杂 Xcode 项目

标签 ios xcode cocoapods

我正在做一个 iOS 项目,不幸的是我们必须使用的一些库有两个版本。一个用于调试的版本,一个用于生产的版本。 无法使用生产库进行调试。同样不可能使用调试库。生产中。

为了解决这个问题,我们在项目中设置了多个目标(一个用于调试,一个用于生产)。这些目标使用单独的 .xcconfig 文件(App-Debug.xcconfig 和 App-Production.xcconfig)为每个目标定义:LIBRARY_SEARCH_PATHS、HEADER_SEARCH_PATHS 和 OTHER_LDFLAGS。

这一切都很好,但是手动跟踪我们所有的第三方依赖项变得很痛苦。 因此,我们决定开始使用 CocoaPods 来管理我们的一些第三方依赖项。

但由于这些“双版本”库,我们无法按预期使用 Pods.xcconfig,而是需要将其中的设置附加到我们自己的 App-Debug.xcconfig 和 App-Production.xcconfig。

我不确定执行此操作的正确方法,因为我尝试的所有操作似乎都无法编译,因为找不到我的 pod。

我们的 Pods.xcconfig:

ALWAYS_SEARCH_USER_PATHS = YES
HEADER_SEARCH_PATHS = ${PODS_HEADERS_SEARCH_PATHS}
LIBRARY_SEARCH_PATHS = "$(PODS_ROOT)/TestFlightSDK"
OTHER_LDFLAGS = -ObjC -lTestFlight -lz -framework SystemConfiguration -framework UIKit
PODS_BUILD_HEADERS_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/AFNetworking" "${PODS_ROOT}/BuildHeaders/TestFlightSDK"
PODS_HEADERS_SEARCH_PATHS = ${PODS_PUBLIC_HEADERS_SEARCH_PATHS}
PODS_PUBLIC_HEADERS_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/AFNetworking" "${PODS_ROOT}/Headers/TestFlightSDK"
PODS_ROOT = ${SRCROOT}/Pods

App-Debug.xcconfig:

#include "Config-XXX.xcconfig"
#include "Config-Tesseract.xcconfig"
#include "Config-AppMeasurement.xcconfig"
#include "Config-Libxml2.xcconfig"
#include "Config-Frameworks.xcconfig"

LIBRARY_SEARCH_PATHS = $(inherited) $(XXX_LIBRARY_SEARCH_PATH_DEBUG) $(TESSERACT_LIBRARY_SEARCH_PATH) $(APPMEASUREMENT_LIBRARY_SEARCH_PATH)

HEADER_SEARCH_PATHS = $(inherited) $(TESSERACT_HEADER_SEARCH_PATH) $(LIBXML2_HEADER_SEARCH_PATH) $(XXX_HEADER_SEARCH_PATH)

OTHER_LDFLAGS = $(inherited) -lz -lxml2 -lstdc++ -all_load -ObjC -lXXXLibrary $(APPLE_FRAMEWORKS)

App-Production.xcconfig:

#include "Config-XXX.xcconfig"
#include "Config-Tesseract.xcconfig"
#include "Config-AppMeasurement.xcconfig"
#include "Config-Libxml2.xcconfig"
#include "Config-Frameworks.xcconfig"

LIBRARY_SEARCH_PATHS = $(inherited) $(XXX_LIBRARY_SEARCH_PATH_PRODUCTION) $(TESSERACT_LIBRARY_SEARCH_PATH) $(APPMEASUREMENT_LIBRARY_SEARCH_PATH)

HEADER_SEARCH_PATHS = $(inherited) $(TESSERACT_HEADER_SEARCH_PATH) $(LIBXML2_HEADER_SEARCH_PATH) $(XXX_HEADER_SEARCH_PATH)

OTHER_LDFLAGS = $(inherited) -lz -lxml2 -lstdc++ -all_load -ObjC -lXXXLibrary $(APPLE_FRAMEWORKS)

Config-XXX.xcconfig:

XXX_LIBRARY_SEARCH_PATH_DEBUG = "$(SRCROOT)/External/XXX"
XXX_LIBRARY_SEARCH_PATH_PRODUCTION = "$(SRCROOT)/External/XXX/LibProd"

XXX_HEADER_SEARCH_PATH = "$(SRCROOT)/External/XXX/headers"

我们可以看到 Pods.xcconfig 和我们自己的 App-Debug.xcconfig 设置了:LIBRARY_SEARCH_PATHS、HEADER_SEARCH_PATHS 和 OTHER_LDFLAGS。

我需要的是将 Pods.xcconfig 中声明的值附加到我们在 App-Debug.xcconfig 中声明的值。

我们正在使用 Xcode 4.6 并为 iOS 4.3 构建。

最佳答案

你的 podfile 可以支持这个。你应该得到这样的结果

platform :ios, "5.0"
link_with ['App', 'App-Debug'] 

pod 'Shared-Pod'

target :App, :exclusive => true do
  pod 'Normal-Pod'
end

target :App-Debug, :exclusive => true do
  pod 'Debug-Pod'
end

这将生成两个 xcconfig 文件,一个用于每个目标。

关于ios - 具有多个 .xcconfig 文件和 cocoapods 的复杂 Xcode 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15258343/

相关文章:

swift - 没有这样的模块 'RestKit' 与 cocoapods 和 swift

objective-c - 如何停止核心动画?

iphone - CADisplayLink 吞下异常

ios - 使用返回的 JSON 值设置 NSString

ios - 应用内购买与比特币支持开发者

ios - 导航 Controller 中嵌入的 View 中的 UINavigationBar - 添加自定义 View

ios - 分发二进制 iOS 框架

ios - Integarte/将 cocoapods 安装到现有的 xcode 项目、objective-c 或 swift

ios - swift:使导航栏从右到左(rtl)同时带有左右项目,例如后退

ios - Glossy iOS 不符合协议(protocol)