Skip to content

Commit 3ca4e99

Browse files
authored
Stop requiring pods to be static frameworks (#6557)
1 parent 5546f96 commit 3ca4e99

37 files changed

+200
-143
lines changed

AddNewPod.md

-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ detailed instructions. Some Firebase specific guidance below:
1313
* `s.deployment_target` - Ideally should include ios, osx, and tvos. See
1414
[FirebaseCore.podspec](FirebaseCore.podspec) for the current Firebase minimum version settings.
1515

16-
* `s.static_framework` - By default, Firebase pods should be static frameworks.
17-
1816
* `s.dependency` - Dependencies on other Firebase pods and pods in this repo should specify a
1917
version and allow minor version updates - like `s.dependency 'FirebaseCore', '~> 6.6'`. When
2018
initially defined, choose the most recently released minor version of the dependency.

FirebaseABTesting.podspec

-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ Firebase Cloud Messaging and Firebase Remote Config in your app.
2525
s.tvos.deployment_target = '10.0'
2626

2727
s.cocoapods_version = '>= 1.4.0'
28-
s.static_framework = true
2928
s.prefix_header_file = false
3029

3130
base_dir = "FirebaseABTesting/Sources/"

FirebaseAppDistribution.podspec

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ iOS SDK for App Distribution for Firebase.
1818
s.ios.deployment_target = '10.0'
1919

2020
s.cocoapods_version = '>= 1.4.0'
21-
s.static_framework = true
2221
s.prefix_header_file = false
2322

2423
base_dir = "FirebaseAppDistribution/Sources/"

FirebaseAuth.podspec

-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ supports email and password accounts, as well as several 3rd party authenticatio
2323
s.watchos.deployment_target = '6.0'
2424

2525
s.cocoapods_version = '>= 1.4.0'
26-
s.static_framework = true
2726
s.prefix_header_file = false
2827

2928
source = 'FirebaseAuth/Sources/'

FirebaseCore.podspec

+12-6
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ Firebase Core includes FIRApp and FIROptions which provide central configuration
2222
s.watchos.deployment_target = '6.0'
2323

2424
s.cocoapods_version = '>= 1.4.0'
25-
s.static_framework = true
2625
s.prefix_header_file = false
2726

2827
s.source_files = [
@@ -54,20 +53,27 @@ Firebase Core includes FIRApp and FIROptions which provide central configuration
5453
}
5554
s.test_spec 'unit' do |unit_tests|
5655
unit_tests.platforms = {:ios => '8.0', :osx => '10.11', :tvos => '10.0'}
57-
unit_tests.source_files = 'FirebaseCore/Tests/Unit/**/*.[mh]'
56+
unit_tests.source_files = [
57+
'FirebaseCore/Tests/Unit/**/*.[mh]',
58+
'SharedTestUtilities/FIROptionsMock.[mh]',
59+
]
5860
unit_tests.requires_app_host = true
5961
unit_tests.dependency 'OCMock'
6062
unit_tests.resources = 'FirebaseCore/Tests/Unit/Resources/GoogleService-Info.plist'
6163
end
6264

6365
s.test_spec 'swift-unit' do |swift_unit_tests|
6466
swift_unit_tests.platforms = {:ios => '8.0', :osx => '10.11', :tvos => '10.0'}
65-
swift_unit_tests.source_files = 'FirebaseCore/Tests/SwiftUnit/**/*.swift',
66-
'FirebaseCore/Tests/SwiftUnit/**/*.h',
67-
'FirebaseCore/Tests/SwiftUnit/SwiftTestingUtilities/*'
68-
swift_unit_tests.resources = 'FirebaseCore/Tests/Unit/Resources/GoogleService-Info.plist'
67+
swift_unit_tests.source_files = [
68+
'FirebaseCore/Tests/SwiftUnit/**/*.swift',
69+
'FirebaseCore/Tests/SwiftUnit/**/*.h',
70+
'FirebaseCore/Tests/SwiftUnit/SwiftTestingUtilities/*',
71+
'SharedTestUtilities/FIROptionsMock.[mh]',
72+
]
6973
swift_unit_tests.pod_target_xcconfig = {
7074
'SWIFT_OBJC_BRIDGING_HEADER' => '$(PODS_TARGET_SRCROOT)/FirebaseCore/Tests/SwiftUnit/FirebaseCore-unit-Bridging-Header.h'
7175
}
76+
swift_unit_tests.dependency 'OCMock'
77+
swift_unit_tests.resources = 'FirebaseCore/Tests/Unit/Resources/GoogleService-Info.plist'
7278
end
7379
end

FirebaseCore/CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
- [changed] Update minimum iOS version to iOS 10 except for Analytics which is now iOS 9. (#4847)
33
- [changed] Update minimum macOS version to 10.12.
44
- [added] Swift Package Manager support for Firebase Messaging. (#5641)
5+
- [changed] The pods developed in this repo are no longer hard coded to be built as static
6+
frameworks. Instead, their linkage will be controlled by the Podfile. Use the Podfile
7+
option `use_frameworks! :linkage => :static` to get the Firebase 6.x linkage behavior. (#2022)
58

69
# Firebase 6.33.0
710
- [fixed] Swift Package Manager - Define system framework and system library dependencies. This

FirebaseCore/Tests/SwiftUnit/FirebaseAppTests.swift

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ private extension Constants {
2323
class FirebaseAppTests: XCTestCase {
2424
override func setUp() {
2525
super.setUp()
26+
FIROptionsMock.mockFIROptions()
2627
}
2728

2829
override func tearDown() {

FirebaseCore/Tests/SwiftUnit/FirebaseCore-unit-Bridging-Header.h

+1
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@
1414

1515
#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
1616
#import "FirebaseCore/Tests/SwiftUnit/SwiftTestingUtilities/ExceptionCatcher.h"
17+
#import "SharedTestUtilities/FIROptionsMock.h"

FirebaseCore/Tests/Unit/FIRAppTest.m

+2-4
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
#import "FirebaseCore/Sources/Private/FIRAppInternal.h"
2020
#import "FirebaseCore/Sources/Private/FIRCoreDiagnosticsConnector.h"
2121
#import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
22-
2322
#import "GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h"
23+
#import "SharedTestUtilities/FIROptionsMock.h"
2424

2525
NSString *const kFIRTestAppName1 = @"test_app_name_1";
2626
NSString *const kFIRTestAppName2 = @"test-app-name-2";
@@ -68,9 +68,7 @@ - (void)setUp {
6868
_observerMock = OCMObserverMock();
6969
_mockCoreDiagnosticsConnector = OCMClassMock([FIRCoreDiagnosticsConnector class]);
7070

71-
#if SWIFT_PACKAGE
72-
[self mockFIROptions];
73-
#endif
71+
[FIROptionsMock mockFIROptions];
7472

7573
OCMStub(ClassMethod([self.mockCoreDiagnosticsConnector logCoreTelemetryWithOptions:[OCMArg any]]))
7674
.andDo(^(NSInvocation *invocation){

FirebaseCore/Tests/Unit/FIRBundleUtilTest.m

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
#import "FirebaseCore/Sources/FIRBundleUtil.h"
1818
#import "GoogleUtilities/Environment/Private/GULAppEnvironmentUtil.h"
19+
#import "SharedTestUtilities/FIROptionsMock.h"
1920

2021
static NSString *const kResultPath = @"resultPath";
2122
static NSString *const kResourceName = @"resourceName";

FirebaseCore/Tests/Unit/FIRComponentContainerTest.m

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616

1717
#import "FirebaseCore/Sources/FIRComponentContainerInternal.h"
1818
#import "FirebaseCore/Sources/Private/FirebaseCoreInternal.h"
19-
2019
#import "FirebaseCore/Tests/Unit/FIRTestComponents.h"
20+
#import "SharedTestUtilities/FIROptionsMock.h"
2121

2222
/// Internally exposed methods and properties for testing.
2323
@interface FIRComponentContainer (TestInternal)

FirebaseCore/Tests/Unit/FIROptionsTest.m

+4-9
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#import "FirebaseCore/Sources/FIRVersion.h"
1919
#import "FirebaseCore/Sources/Private/FIRAppInternal.h"
2020
#import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
21+
#import "SharedTestUtilities/FIROptionsMock.h"
2122

2223
extern NSString *const kFIRIsMeasurementEnabled;
2324
extern NSString *const kFIRIsAnalyticsCollectionEnabled;
@@ -43,9 +44,7 @@ - (void)setUp {
4344
}
4445

4546
- (void)testInit {
46-
#if SWIFT_PACKAGE
47-
[self mockFIROptions];
48-
#endif
47+
[FIROptionsMock mockFIROptions];
4948
NSDictionary *optionsDictionary = [FIROptions defaultOptionsDictionary];
5049
FIROptions *options = [[FIROptions alloc] initInternalWithOptionsDictionary:optionsDictionary];
5150
[self assertOptionsMatchDefaults:options andProjectID:YES];
@@ -75,9 +74,7 @@ - (void)testDefaultOptionsDictionaryWithInvalidSourceFile {
7574
}
7675

7776
- (void)testDefaultOptions {
78-
#if SWIFT_PACKAGE
79-
[self mockFIROptions];
80-
#endif
77+
[FIROptionsMock mockFIROptions];
8178
FIROptions *options = [FIROptions defaultOptions];
8279
[self assertOptionsMatchDefaults:options andProjectID:YES];
8380
XCTAssertNil(options.deepLinkURLScheme);
@@ -242,9 +239,7 @@ - (void)testCopyingProperties {
242239
}
243240

244241
- (void)testCopyWithZone {
245-
#if SWIFT_PACKAGE
246-
[self mockFIROptions];
247-
#endif
242+
[FIROptionsMock mockFIROptions];
248243
// default options
249244
FIROptions *options = [FIROptions defaultOptions];
250245
options.deepLinkURLScheme = kDeepLinkURLScheme;

FirebaseCore/Tests/Unit/FIRTestCase.h

-21
Original file line numberDiff line numberDiff line change
@@ -17,29 +17,8 @@
1717
#import <XCTest/XCTest.h>
1818
#import "OCMock.h"
1919

20-
NS_ASSUME_NONNULL_BEGIN
21-
22-
extern NSString *const kAPIKey;
23-
extern NSString *const kCustomizedAPIKey;
24-
extern NSString *const kClientID;
25-
extern NSString *const kTrackingID;
26-
extern NSString *const kGCMSenderID;
27-
extern NSString *const kAndroidClientID;
28-
extern NSString *const kGoogleAppID;
29-
extern NSString *const kDatabaseURL;
30-
extern NSString *const kStorageBucket;
31-
32-
extern NSString *const kDeepLinkURLScheme;
33-
extern NSString *const kNewDeepLinkURLScheme;
34-
35-
extern NSString *const kBundleID;
36-
extern NSString *const kProjectID;
37-
3820
/**
3921
* Base test case for Firebase Core SDK tests.
4022
*/
4123
@interface FIRTestCase : XCTestCase
42-
- (void)mockFIROptions;
4324
@end
44-
45-
NS_ASSUME_NONNULL_END

FirebaseCore/Tests/Unit/FIRTestCase.m

-46
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,6 @@
1414

1515
#import "FirebaseCore/Tests/Unit/FIRTestCase.h"
1616

17-
#import "FirebaseCore/Sources/Private/FIROptionsInternal.h"
18-
19-
NSString *const kAndroidClientID = @"correct_android_client_id";
20-
NSString *const kAPIKey = @"correct_api_key";
21-
NSString *const kCustomizedAPIKey = @"customized_api_key";
22-
NSString *const kClientID = @"correct_client_id";
23-
NSString *const kTrackingID = @"correct_tracking_id";
24-
NSString *const kGCMSenderID = @"correct_gcm_sender_id";
25-
NSString *const kGoogleAppID = @"1:123:ios:123abc";
26-
NSString *const kDatabaseURL = @"https://abc-xyz-123.firebaseio.com";
27-
NSString *const kStorageBucket = @"project-id-123.storage.firebase.com";
28-
29-
NSString *const kDeepLinkURLScheme = @"comgoogledeeplinkurl";
30-
NSString *const kNewDeepLinkURLScheme = @"newdeeplinkurlfortest";
31-
32-
NSString *const kBundleID = @"com.google.FirebaseSDKTests";
33-
NSString *const kProjectID = @"abc-xyz-123";
34-
3517
@interface FIRTestCase ()
3618

3719
@end
@@ -42,34 +24,6 @@ - (void)setUp {
4224
[super setUp];
4325
}
4426

45-
// Swift Package manager does not allow a test project to override a bundle in an app (or library).
46-
- (void)mockFIROptions {
47-
// Keys for the strings in the plist file.
48-
NSString *const kFIRAPIKey = @"API_KEY";
49-
NSString *const kFIRTrackingID = @"TRACKING_ID";
50-
NSString *const kFIRGoogleAppID = @"GOOGLE_APP_ID";
51-
NSString *const kFIRClientID = @"CLIENT_ID";
52-
NSString *const kFIRGCMSenderID = @"GCM_SENDER_ID";
53-
NSString *const kFIRDatabaseURL = @"DATABASE_URL";
54-
NSString *const kFIRStorageBucket = @"STORAGE_BUCKET";
55-
NSString *const kFIRBundleID = @"BUNDLE_ID";
56-
NSString *const kFIRProjectID = @"PROJECT_ID";
57-
58-
NSDictionary<NSString *, NSString *> *mockDictionary = @{
59-
kFIRAPIKey : kAPIKey,
60-
kFIRBundleID : kBundleID,
61-
kFIRClientID : kClientID,
62-
kFIRDatabaseURL : kDatabaseURL,
63-
kFIRGCMSenderID : kGCMSenderID,
64-
kFIRGoogleAppID : kGoogleAppID,
65-
kFIRProjectID : kProjectID,
66-
kFIRStorageBucket : kStorageBucket,
67-
kFIRTrackingID : kTrackingID,
68-
};
69-
id optionsClassMock = OCMClassMock([FIROptions class]);
70-
OCMStub([optionsClassMock defaultOptionsDictionary]).andReturn(mockDictionary);
71-
}
72-
7327
- (void)tearDown {
7428
[super tearDown];
7529
}

FirebaseCoreDiagnostics.podspec

-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ non-Cocoapod integration. This library also respects the Firebase global data co
2424
s.watchos.deployment_target = '6.0'
2525

2626
s.cocoapods_version = '>= 1.4.0'
27-
s.static_framework = true
2827
s.prefix_header_file = false
2928

3029
header_search_paths = {

FirebaseCrashlytics.podspec

-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ Pod::Spec.new do |s|
1717
s.watchos.deployment_target = '6.0'
1818

1919
s.cocoapods_version = '>= 1.4.0'
20-
s.static_framework = true
2120
s.prefix_header_file = false
2221

2322
s.source_files = [

FirebaseDatabase.podspec

+16-9
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ Simplify your iOS development, grow your user base, and monetize more effectivel
2121
s.tvos.deployment_target = '10.0'
2222

2323
s.cocoapods_version = '>= 1.4.0'
24-
s.static_framework = true
2524
s.prefix_header_file = false
2625

2726
base_dir = "FirebaseDatabase/Sources/"
@@ -44,19 +43,27 @@ Simplify your iOS development, grow your user base, and monetize more effectivel
4443
}
4544

4645
s.test_spec 'unit' do |unit_tests|
47-
unit_tests.source_files = 'FirebaseDatabase/Tests/Unit/*.[mh]',
48-
'FirebaseDatabase/Tests/Helpers/*.[mh]',
49-
'FirebaseDatabase/Tests/third_party/*.[mh]',
50-
'SharedTestUtilities/FIRAuthInteropFake.[mh]',
51-
'SharedTestUtilities/FIRComponentTestUtilities.h'
46+
unit_tests.source_files = [
47+
'FirebaseDatabase/Tests/Unit/*.[mh]',
48+
'FirebaseDatabase/Tests/Helpers/*.[mh]',
49+
'FirebaseDatabase/Tests/third_party/*.[mh]',
50+
'SharedTestUtilities/FIRAuthInteropFake.[mh]',
51+
'SharedTestUtilities/FIRComponentTestUtilities.h',
52+
'SharedTestUtilities/FIROptionsMock.[mh]',
53+
]
54+
unit_tests.dependency 'OCMock'
5255
unit_tests.resources = 'FirebaseDatabase/Tests/Resources/syncPointSpec.json',
5356
'FirebaseDatabase/Tests/Resources/GoogleService-Info.plist'
5457
end
5558

5659
s.test_spec 'integration' do |int_tests|
57-
int_tests.source_files = 'FirebaseDatabase/Tests/Integration/*.[mh]',
58-
'FirebaseDatabase/Tests/Helpers/*.[mh]',
59-
'SharedTestUtilities/FIRAuthInteropFake.[mh]'
60+
int_tests.source_files = [
61+
'FirebaseDatabase/Tests/Integration/*.[mh]',
62+
'FirebaseDatabase/Tests/Helpers/*.[mh]',
63+
'SharedTestUtilities/FIRAuthInteropFake.[mh]',
64+
'SharedTestUtilities/FIROptionsMock.[mh]',
65+
]
66+
int_tests.dependency 'OCMock'
6067
int_tests.resources = 'FirebaseDatabase/Tests/Resources/GoogleService-Info.plist'
6168
end
6269
end

FirebaseDatabase/Tests/Helpers/FTestBase.m

+2-3
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,15 @@
2020
#import "FirebaseDatabase/Tests/Helpers/FIRTestAuthTokenProvider.h"
2121
#import "FirebaseDatabase/Tests/Helpers/FTestAuthTokenGenerator.h"
2222
#import "FirebaseDatabase/Tests/Helpers/FTestBase.h"
23+
#import "SharedTestUtilities/FIROptionsMock.h"
2324

2425
@implementation FTestBase
2526

2627
+ (void)setUp {
2728
static dispatch_once_t once;
2829
dispatch_once(&once, ^{
29-
#if !SWIFT_PACKAGE
30-
// Disabled for now with SPM. configure is not needed for the unit tests.
30+
[FIROptionsMock mockFIROptions];
3131
[FIRApp configure];
32-
#endif
3332
});
3433
}
3534

FirebaseDynamicLinks.podspec

-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ Firebase Dynamic Links are deep links that enhance user experience and increase
1919
s.ios.deployment_target = '10.0'
2020

2121
s.cocoapods_version = '>= 1.4.0'
22-
s.static_framework = true
2322
s.prefix_header_file = false
2423

2524
s.source_files = [

FirebaseFirestore.podspec

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ Google Cloud Firestore is a NoSQL document database built for automatic scaling,
2121
s.tvos.deployment_target = '10.0'
2222

2323
s.cocoapods_version = '>= 1.4.0'
24-
s.static_framework = true
2524
s.prefix_header_file = false
2625

2726
s.source_files = [

FirebaseFirestoreSwift.podspec

-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ Google Cloud Firestore is a NoSQL document database built for automatic scaling,
2727
s.tvos.deployment_target = '10.0'
2828

2929
s.cocoapods_version = '>= 1.4.0'
30-
s.static_framework = true
3130
s.prefix_header_file = false
3231

3332
s.requires_arc = true

FirebaseFunctions.podspec

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ Cloud Functions for Firebase.
2020
s.tvos.deployment_target = '10.0'
2121

2222
s.cocoapods_version = '>= 1.4.0'
23-
s.static_framework = true
2423
s.prefix_header_file = false
2524

2625
s.source_files = [

FirebaseInAppMessaging.podspec

-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ See more product details at https://firebase.google.com/products/in-app-messagin
2020
s.ios.deployment_target = '10.0'
2121

2222
s.cocoapods_version = '>= 1.4.0'
23-
s.static_framework = true
2423
s.prefix_header_file = false
2524

2625
base_dir = "FirebaseInAppMessaging/"

0 commit comments

Comments
 (0)