16

私は iOS プロジェクトに取り組んでいますが、使用しなければならないライブラリの一部が 2 つのバージョンで提供されているという不幸な状況にあります。デバッグ用のバージョンと本番用のバージョン。製品ライブラリでデバッグすることはできません。同様に、デバッグ ライブラリを使用することはできません。生産中。

この問題を解決するために、プロジェクトに複数のターゲット (デバッグ用と本番用) を設定しました。これらのターゲットは、個別の .xcconfig ファイル (App-Debug.xcconfig および App-Production.xcconfig) を使用して、ターゲットごとに LIBRARY_SEARCH_PATHS、HEADER_SEARCH_PATHS、および OTHER_LDFLAGS を定義します。

これはすべてうまく機能しますが、すべてのサードパーティの依存関係を手動で追跡するのは面倒です. そのため、CocoaPods を使用してサードパーティの依存関係を管理することにしました。

しかし、これらの「2 つのバージョン」ライブラリがあるため、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 用にビルドしています。

4

2 に答える 2

16

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

これにより、ターゲットごとに1つずつ、合計2つのxcconfigファイルが生成されます。

于 2013-03-07T01:52:06.253 に答える
1

2 つのターゲットを使用する代わりにXXX_LIBRARY_PATH構成で異なる値を定義してみてください(悲しいことに、GUI で最も簡単です)。構成が 2 つしかなく、適切な名前が付けられている場合は、次のようなこともできますXXX_LIBRARY_PATH = FooPath/$(CONFIGURATION)

1 つのターゲット構成が別のターゲット構成にプロパティを追加することはできません。「継承」は厳密には SDK → Project[Config] → Target[Config] です。

于 2013-03-07T03:55:34.810 に答える