2013-03-06 80 views
15

我正在研究一個iOS項目,我們處於不幸的情況,即我們必須使用的一些庫有兩個版本。一個用於調試的版本和一個用於生產的版本。 無法使用生產庫進行調試。同樣也不可能使用調試庫。在生產中。具有多個.xcconfig文件和cocoapods的複雜Xcode項目

爲了解決這個問題,我們在項目中設置了多個目標(一個用於調試,一個用於生產)。這些目標使用單獨的.xcconfig文件(App-Debug.xcconfig和App-Production.xcconfig)爲每個目標定義:LIBRARY_SEARCH_PATHS,HEADER_SEARCH_PATHS & OTHER_LDFLAGS。

這一切都工作得很好,但手動追蹤我們所有的第三方依賴關係是一種痛苦。因此我們決定開始使用CocoaPods來管理我們的一些第三方依賴項。

但是,由於這些「兩個版本」庫,我們無法按預期使用Pods.xcconfig,但需要將設置從它附加到我們自己的App-Debug.xcconfig和App-Production.xcconfig。

我不知道正確的方法做到這一點,因爲我嘗試的所有東西似乎都沒有編譯,因爲找不到我的豆莢。

我們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) 

配置-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構建。

回答

14

你的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文件,每個目標一個。

+0

這真的很棒,我不知道這是可能的。 在接下來的幾天裏,我會試一試 - 我們沒有設置來處理自定義的豆莢(還)。 – cvknage 2013-03-07 06:25:19

1

而不是使用兩個目標,嘗試在配置(悲傷地在GUI中最容易)定義XXX_LIBRARY_PATH的不同值。如果您只有兩種配置並且命名適當,您甚至可以執行諸如XXX_LIBRARY_PATH = FooPath/$(CONFIGURATION)之類的操作。

一個目標配置不能將屬性追加到另一個; 「繼承」是嚴格的SDK →項目[配置] →目標[配置]。

+0

我們現在解決這個問題的方法(不使用cocoapods)是通過爲XXXLibrary定義兩個搜索路徑。 我使用Config-XXX.xcconfig的內容編輯我的帖子 但是,這不是問題,當我們嘗試將一些第三方依賴關係移動到cocoapods時,問題就會生效。然後,我們移動的依賴關係不能被Xcode找到,並且項目不會生成。 – cvknage 2013-03-07 06:35:46

相關問題