Skip to content

Commit 5f8e64b

Browse files
authored
Merge pull request #1350 from firebase/fix/storage-ui-spm-firebase-11
fix(FirebaseStorageUI): fix SPM build failure with Firebase Storage 11.x
2 parents cd9e3dd + 0272a43 commit 5f8e64b

9 files changed

Lines changed: 58 additions & 40 deletions

.github/workflows/storage.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
uses: actions/checkout@main
4848
- name: Select Xcode version
4949
run: |
50-
sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer
50+
sudo xcode-select -switch /Applications/Xcode_16.4.app/Contents/Developer
5151
- name: List
5252
run: |
5353
xcodebuild -list
@@ -63,7 +63,7 @@ jobs:
6363
uses: actions/checkout@main
6464
- name: Select Xcode version
6565
run: |
66-
sudo xcode-select -switch /Applications/Xcode_16.3.app/Contents/Developer
66+
sudo xcode-select -switch /Applications/Xcode_16.4.app/Contents/Developer
6767
- name: Setup
6868
run: gem install bundler; bundle install
6969
- name: Build

FirebaseStorageUI/Sources/FIRStorageDownloadTask+SDWebImage.m

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,17 @@
1616

1717
#import "FirebaseStorageUI/Sources/Public/FirebaseStorageUI/FIRStorageDownloadTask+SDWebImage.h"
1818

19+
// For SPM builds the header is empty (no @import, no @interface) to keep the
20+
// Clang module scanner happy. Provide the full import and category declaration
21+
// here where @import is safe (compilation phase, not scan phase).
22+
#if !__has_include(<FirebaseStorage/FirebaseStorage.h>) && !__has_include(<FirebaseStorage/FirebaseStorage-Swift.h>)
23+
@import FirebaseStorage;
24+
NS_ASSUME_NONNULL_BEGIN
25+
@interface FIRStorageDownloadTask (SDWebImage) <SDWebImageOperation>
26+
@end
27+
NS_ASSUME_NONNULL_END
28+
#endif
29+
1930
@implementation FIRStorageDownloadTask (SDWebImage)
2031

2132
@end

FirebaseStorageUI/Sources/FUIStorageImageLoader.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ - (BOOL)canRequestImageForURL:(NSURL *)url {
164164
}
165165
}];
166166

167-
return download;
167+
return (id<SDWebImageOperation>)download;
168168
}
169169

170170
- (BOOL)shouldBlockFailedURLWithURL:(NSURL *)url error:(NSError *)error {

FirebaseStorageUI/Sources/NSURL+FirebaseStorage.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
#import "FirebaseStorageUI/Sources/Public/FirebaseStorageUI/NSURL+FirebaseStorage.h"
1818
#import <objc/runtime.h>
1919

20+
#if __has_include(<FirebaseStorage/FirebaseStorage.h>)
21+
#import <FirebaseStorage/FirebaseStorage.h>
22+
#elif __has_include(<FirebaseStorage/FirebaseStorage-Swift.h>)
23+
#import <FirebaseStorage/FirebaseStorage-Swift.h>
24+
#else
25+
@import FirebaseStorage;
26+
#endif
27+
2028
@implementation NSURL (FirebaseStorage)
2129

2230
- (FIRStorageReference *)sd_storageReference {

FirebaseStorageUI/Sources/Public/FirebaseStorageUI/FIRStorageDownloadTask+SDWebImage.h

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,24 @@
1414
// limitations under the License.
1515
//
1616

17+
#import <SDWebImage/SDWebImage.h>
18+
19+
// The category declaration requires FIRStorageDownloadTask to be fully defined,
20+
// which is only possible when the CocoaPods-style headers are present.
21+
// For SPM builds the declaration (and @import FirebaseStorage) live in the .m file
22+
// so the Clang module scanner never sees @import here.
1723
#if __has_include(<FirebaseStorage/FirebaseStorage.h>)
18-
// Firebase 8.x
24+
// Firebase 8.x (CocoaPods)
1925
#import <FirebaseStorage/FirebaseStorage.h>
26+
NS_ASSUME_NONNULL_BEGIN
27+
@interface FIRStorageDownloadTask (SDWebImage) <SDWebImageOperation>
28+
@end
29+
NS_ASSUME_NONNULL_END
2030
#elif __has_include(<FirebaseStorage/FirebaseStorage-Swift.h>)
21-
// Firebase 9.0+
31+
// Firebase 9.0+ (CocoaPods)
2232
#import <FirebaseStorage/FirebaseStorage-Swift.h>
23-
#else
24-
@import FirebaseStorage;
33+
NS_ASSUME_NONNULL_BEGIN
34+
@interface FIRStorageDownloadTask (SDWebImage) <SDWebImageOperation>
35+
@end
36+
NS_ASSUME_NONNULL_END
2537
#endif
26-
#import <SDWebImage/SDWebImage.h>
27-
28-
NS_ASSUME_NONNULL_BEGIN
29-
30-
// `FIRStorageDownloadTask` conforms to `SDWebImageOperation` protocol
31-
@interface FIRStorageDownloadTask (SDWebImage) <SDWebImageOperation>
32-
33-
@end
34-
35-
NS_ASSUME_NONNULL_END

FirebaseStorageUI/Sources/Public/FirebaseStorageUI/FUIStorageDefine.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,6 @@
1414
// limitations under the License.
1515
//
1616

17-
#if __has_include(<FirebaseStorage/FirebaseStorage.h>)
18-
// Firebase 8.x
19-
#import <FirebaseStorage/FirebaseStorage.h>
20-
#elif __has_include(<FirebaseStorage/FirebaseStorage-Swift.h>)
21-
// Firebase 9.0+
22-
#import <FirebaseStorage/FirebaseStorage-Swift.h>
23-
#else
24-
@import FirebaseStorage;
25-
#endif
2617
#import <SDWebImage/SDWebImage.h>
2718

2819
/**

FirebaseStorageUI/Sources/Public/FirebaseStorageUI/NSURL+FirebaseStorage.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@
1616
#import <Foundation/Foundation.h>
1717

1818
#if __has_include(<FirebaseStorage/FirebaseStorage.h>)
19-
// Firebase 8.x
19+
// Firebase 8.x (CocoaPods)
2020
#import <FirebaseStorage/FirebaseStorage.h>
2121
#elif __has_include(<FirebaseStorage/FirebaseStorage-Swift.h>)
22-
// Firebase 9.0+
22+
// Firebase 9.0+ (CocoaPods)
2323
#import <FirebaseStorage/FirebaseStorage-Swift.h>
2424
#else
25-
@import FirebaseStorage;
25+
// Swift Package Manager: forward declaration only.
26+
@class FIRStorageReference;
2627
#endif
2728

2829
NS_ASSUME_NONNULL_BEGIN

FirebaseStorageUI/Sources/Public/FirebaseStorageUI/UIImageView+FirebaseStorage.h

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,18 @@
1717
#import <UIKit/UIKit.h>
1818

1919
#if __has_include(<FirebaseStorage/FirebaseStorage.h>)
20-
// Firebase 8.x
20+
// Firebase 8.x (CocoaPods)
2121
#import <FirebaseStorage/FirebaseStorage.h>
2222
#elif (__has_include(<FirebaseStorage/FirebaseStorage-Swift.h>))
23-
// Firebase 9.0+
23+
// Firebase 9.0+ (CocoaPods)
2424
#import <FirebaseStorage/FirebaseStorage-Swift.h>
2525
#else
26-
// If you're using FirebaseStorageUI via Swift Package Manager
27-
// from a Swift or mixed Swift/ObjC build target, you will need
28-
// to add
29-
// -Xcc -fmodule-map-file=$(GENERATED_MODULEMAP_DIR)/FirebaseStorage.modulemap
30-
// to your target's Other Swift Flags build setting.
31-
// See
32-
// https://github.com/firebase/FirebaseUI-iOS/issues/1028#issuecomment-1262689219
33-
// for more details.
34-
@import FirebaseStorage;
26+
// Swift Package Manager: forward declarations only to avoid Clang module-scanner
27+
// failures. Your app target must `@import FirebaseStorage` (or `import FirebaseStorage`
28+
// in Swift) separately.
29+
@class FIRStorage;
30+
@class FIRStorageReference;
31+
@class FIRStorageDownloadTask;
3532
#endif
3633
#import <SDWebImage/SDWebImage.h>
3734

FirebaseStorageUI/Sources/UIImageView+FirebaseStorage.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
#import "FirebaseStorageUI/Sources/Public/FirebaseStorageUI/UIImageView+FirebaseStorage.h"
1818
#import "FirebaseStorageUI/Sources/Public/FirebaseStorageUI/FUIStorageImageLoader.h"
1919

20+
#if __has_include(<FirebaseStorage/FirebaseStorage.h>)
21+
#import <FirebaseStorage/FirebaseStorage.h>
22+
#elif __has_include(<FirebaseStorage/FirebaseStorage-Swift.h>)
23+
#import <FirebaseStorage/FirebaseStorage-Swift.h>
24+
#else
25+
@import FirebaseStorage;
26+
#endif
27+
2028
@implementation UIImageView (FirebaseStorage)
2129

2230
- (void)sd_setImageWithStorageReference:(FIRStorageReference *)storageRef {

0 commit comments

Comments
 (0)