Skip to content

Commit 1ed6d66

Browse files
authored
Make instanceForProtocol:inContainer: return nullable T (#12391)
1 parent 3de7e6c commit 1ed6d66

File tree

4 files changed

+15
-9
lines changed

4 files changed

+15
-9
lines changed

FirebaseCore/Extension/FIRComponentType.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ NS_SWIFT_NAME(ComponentType)
2727

2828
/// Do not use directly. A factory method to retrieve an instance that provides a specific
2929
/// functionality.
30-
+ (T)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container;
30+
+ (nullable T)instanceForProtocol:(Protocol *)protocol
31+
inContainer:(FIRComponentContainer *)container;
3132

3233
@end
3334

FirebaseCore/Sources/FIRComponentType.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020

2121
@implementation FIRComponentType
2222

23-
+ (id)instanceForProtocol:(Protocol *)protocol inContainer:(FIRComponentContainer *)container {
23+
+ (nullable id)instanceForProtocol:(Protocol *)protocol
24+
inContainer:(FIRComponentContainer *)container {
2425
// Forward the call to the container.
2526
return [container instanceForProtocol:protocol];
2627
}

FirebaseStorage/Sources/Storage.swift

+8-4
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,10 @@ import FirebaseCore
6161
/// - Parameter app: The custom `FirebaseApp` used for initialization.
6262
/// - Returns: A `Storage` instance, configured with the custom `FirebaseApp`.
6363
@objc(storageForApp:) open class func storage(app: FirebaseApp) -> Storage {
64-
let provider = ComponentType<StorageProvider>.instance(for: StorageProvider.self,
65-
in: app.container)
64+
guard let provider = ComponentType<StorageProvider>.instance(for: StorageProvider.self,
65+
in: app.container) else {
66+
fatalError("No \(StorageProvider.self) instance found for Firebase app: \(app.name)")
67+
}
6668
return provider.storage(for: Storage.bucket(for: app))
6769
}
6870

@@ -75,8 +77,10 @@ import FirebaseCore
7577
/// URL.
7678
@objc(storageForApp:URL:)
7779
open class func storage(app: FirebaseApp, url: String) -> Storage {
78-
let provider = ComponentType<StorageProvider>.instance(for: StorageProvider.self,
79-
in: app.container)
80+
guard let provider = ComponentType<StorageProvider>.instance(for: StorageProvider.self,
81+
in: app.container) else {
82+
fatalError("No \(StorageProvider.self) instance found for Firebase app: \(app.name)")
83+
}
8084
return provider.storage(for: Storage.bucket(for: app, urlString: url))
8185
}
8286

FirebaseStorage/Tests/Unit/StorageComponentTests.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,14 @@ class StorageComponentTests: StorageTestHelpers {
7070
in: container)
7171
XCTAssertNotNil(provider)
7272

73-
let storage1 = provider.storage(for: "randomBucket")
74-
let storage2 = provider.storage(for: "randomBucket")
73+
let storage1 = provider?.storage(for: "randomBucket")
74+
let storage2 = provider?.storage(for: "randomBucket")
7575
XCTAssertNotNil(storage1)
7676

7777
// Ensure they're the same instance.
7878
XCTAssert(storage1 === storage2)
7979

80-
let storage3 = provider.storage(for: "differentBucket")
80+
let storage3 = provider?.storage(for: "differentBucket")
8181
XCTAssertNotNil(storage3)
8282

8383
XCTAssert(storage1 !== storage3)

0 commit comments

Comments
 (0)