From a1339483b42dc921527f7df5e49e2162761dc400 Mon Sep 17 00:00:00 2001 From: Gil Date: Thu, 3 May 2018 13:34:13 -0700 Subject: Prepare Firestore for use as a static library (#1210) * Remove spurious dependencies on other project targets in the integration tests * Integration tests don't depend on OCMock ... and shouldn't * Integration tests don't directly depend upon leveldb either * Flatten Firestore example Podfile Make the targets independent in Firestore/Example/Podfile and add a workaround to deduplicate dependencies. * Project file output from running pod update --- Firestore/Example/Podfile | 57 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 13 deletions(-) (limited to 'Firestore/Example/Podfile') diff --git a/Firestore/Example/Podfile b/Firestore/Example/Podfile index 92b199a..eb811e8 100644 --- a/Firestore/Example/Podfile +++ b/Firestore/Example/Podfile @@ -12,25 +12,56 @@ pod 'FirebaseFirestore', :path => '../../' target 'Firestore_Example_iOS' do platform :ios, '8.0' - target 'Firestore_Tests_iOS' do - inherit! :search_paths + # Test targets are below to avoid problems with duplicate symbols when + # building as a static library (see comments below). +end - pod 'leveldb-library' - pod 'OCMock' - pod 'GoogleTest', :podspec => 'Tests/GoogleTest/GoogleTest.podspec' - end +target 'Firestore_Tests_iOS' do + platform :ios, '8.0' - target 'Firestore_IntegrationTests_iOS' do - inherit! :search_paths + pod 'leveldb-library' + pod 'OCMock' + pod 'GoogleTest', :podspec => 'Tests/GoogleTest/GoogleTest.podspec' +end - pod 'OCMock' - end +target 'Firestore_IntegrationTests_iOS' do + platform :ios, '8.0' +end - target 'Firestore_SwiftTests_iOS' do - pod 'FirebaseFirestoreSwift', :path => '../../' - end +target 'Firestore_SwiftTests_iOS' do + platform :ios, '8.0' + pod 'FirebaseFirestoreSwift', :path => '../../' end target 'SwiftBuildTest' do platform :ios, '8.0' end + +# Firestore includes both Objective-C and C++ code, and the Firestore tests +# consist of both XCTest-based tests in Objective-C and GoogleTest-based tests +# in C++. The C++ tests must resolve the classes under test at link time, so +# CocoaPods usual strategy linking Frameworks to the app and then resolving +# those classes through run-time loading does not work in all cases. +# +# If use_frameworks! is disabled above, the project will encounter a ton of +# duplicate Objective-C class warnings during test runs. Some of the tests will +# fail too because duplicate classes also get duplicate static data and this +# violates the expectations of code we depend upon. +# +# The workaround is to strip duplicate dependencies out of the example app, +# which does not need them since it doesn't do anything other than act as a +# host to the tests. This is based on the workaround posted here: +# +# https://github.com/CocoaPods/CocoaPods/issues/7155 +# +# TODO(wilhuff): Reevaluate if this is needed once we require CocoaPods 1.5.1 +# which may address this. +pre_install do |installer| + test_target = installer.aggregate_targets.find do |target| + target.name == 'Pods-Firestore_Tests_iOS' + end + app_target = installer.aggregate_targets.find do |target| + target.name == 'Pods-Firestore_Example_iOS' + end + app_target.pod_targets = app_target.pod_targets - test_target.pod_targets +end -- cgit v1.2.3