Open alexanderkhitev opened 2 years ago
I found a few problems with this issue:
Off the top of my head, this might be due to the FirebaseCore module headers not being visible from your test target. You can check your search paths build settings to see if this is the case.
Otherwise, if you could upload a test project that repros this issue, it would help us identify the root cause.
hey @morganchen12 ! Yes, sure. It's a simple project. I'll also have a look on your suggestion (paths build settings). FirebaseSDKs.zip
Thanks for the great repro @alexanderkhitev
Add FirebaseAuth as a linker dependency to the test targets:
Thanks for the great repro @alexanderkhitev
Add FirebaseAuth as a linker dependency to the test targets:
Thank you. I have only one question. Unless in this case we do not receive errors like this one? Class FIRCoreDiagnosticsLog is implemented in both
Good question. I see that also. It seems that Xcode is using different search path algorithms between compiling and linking, but I'm not sure why.
Ok, I was able to work around this by adding -Xcc -fmodule-map-file="/path/to/FirebaseCore.modulemap"
in the test targets' Other Swift Flags
build setting. What's going on is explained via @Neonichu here.
It's not immediately clear to me what the best solution for us from a library vendor standpoint is.
This tripped me off as well. I first had Missing required module 'FirebaseFirestore'
. After including this as described by @paulb777 I got errors about AppCheck
so now I just ended up linking all possible firebase libraries to the test target, which got it working. Have to say that this issue was pretty hard to find, so maybe including some hints in the SPM README would be a good idea.
Could someone explain why we have to add Firebase* to the tests targets? I have 5 others frameworks which do not have to be added 🤔.
Thanks 😊
Yes, same here with @matkuznik
Adding libs to test target is not a problem, however running tests are crashed due random errors from Firebase. For example: -[FBLPromise HTTPBody]: unrecognized selector sent to instance
My test has nothing to do with Firebase.
@nesimtunc this is an unrelated issue. Make sure the -ObjC
linker flag is present in your test target, or file a new issue with a repro if the crash persists.
Could someone explain why we have to add Firebase* to the tests targets? I have 5 others frameworks which do not have to be added 🤔.
Thanks 😊
@matkuznik you should not add the frameworks to the test target or you'll have duplicate class definitions. See this comment for a workaround: https://github.com/firebase/firebase-ios-sdk/issues/10049#issuecomment-1212564192
I had to switch to pods, with that the error has gone. Thank you @morganchen12
guys, I found really weird solution, here is a short story for a better context
I have xcode project with multiple targets, and I have one test bundle for each target to test snapshots.
We've added 2 more targets about 6 months ago, I did it, and I added 2 new test bundles, so it's kinda "fresh" in my memory. And now we have to add another one, but I couldn't do that due to Missing required module
issue. I've tried multiple ways, like switching to pods/SPM, linking binaries for test bundle... But I've noticed one thing: Bundle Loader
setting in Build settings
had two slashes (see screenshot). When I manually changed value to
$(BUILT_PRODUCTS_DIR)/<MyApp>.app/<MyApp>
it worked!
This is definitely xcode 14 issue, because when you change a host for test bundle, it puts two slashes again!
I really hope that will help you, I've spent 3-4 days searching a solution
@nesimtunc this is an unrelated issue. Make sure the
-ObjC
linker flag is present in your test target, or file a new issue with a repro if the crash persists.
Should I add OTHER_LDFLAGS = "-ObjC";
to the production target as well?
EDIT: I've just found
Analytics requires clients to add -ObjC linker option.
and
If you've installed FirebaseAnalytics, add the -ObjC option to Other Linker Flags in the Build Settings tab.
in SwiftPackageManager.md. But I have not installed FirebaseAnalytics
and I have those crashes as well.
Could someone explain why we have to add Firebase* to the tests targets? I have 5 others frameworks which do not have to be added 🤔. Thanks 😊
@matkuznik you should not add the frameworks to the test target or you'll have duplicate class definitions. See this comment for a workaround: #10049 (comment)
Thanks a lot for you suggestion. Could you help me with finding a path to the FirebaseCore.modulemap
? I can not localise it. I'm using SPM.
@matkuznik it should be in the Derived Data directory for your target.
@matkuznik it should be in the Derived Data directory for your target.
Thanks. I found a few. One is located in the Index.noindex/Build/Intermediates.noindex/GeneratedModuleMaps-iphonesimulator/FirebaseCore.modulemap
and I'm using it.
There is also a env variable to this folder GENERATED_MODULEMAP_DIR
so the Build settings is: -Xcc -fmodule-map-file="$GENERATED_MODULEMAP_DIR/FirebaseCore.modulemap"
I found a different (better?) workaround.
Under my test target build settings, Testing, Test Host Change it from: "$(BUILT_PRODUCTS_DIR)/MyApp.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MyApp" to: "$(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp"
The BUNDLE_EXECUTABLE_FOLDER_PATH variable was evaluating to empty, so I was seeing a double slash in the path "$(BUILT_PRODUCTS_DIR)/MyApp.app//MyApp"
BUILT_PRODUCTS_DIR)/<MyApp>.app/<MyApp>
Hey @GlebCherkashyn ! I tried your solution. It works. I tried with Xcode Version 14.2 (14C18). 🤔
@bennoland's suggestion worked a trick for my project using SPM and Xcode 14.2(14c18).
I also tried making a fresh empty project in Xcode with Firebase as the sole SPM dependency and hit the same problem where tests would fail to build as soon as the host app's code imported Firebase. Following @bennoland's suggestion this fixed it here too
@chawkinsnz-hnry This helped me a lot! These steps should be included in the https://github.com/firebase/firebase-ios-sdk/blob/master/SwiftPackageManager.md
if you are using Cocoapods adding Pods_MyAppTests.framework to your test target Link Binary With Libraries in Build Phases settings fixed it for me on a particular project. On another project instead I had to add all libraries related to Firebase in the same way.
@GlebCherkashyn @bennoland Thank you for your attempts to help. I faced the same problem and tried your solution. It didn't help, unfortunately. If I add "@testable import TheWallet" to the test, the "missing required modules" error immediately occurs.
I tried this workaround, problem with -[FBLPromise HTTPBody]: unrecognized selector sent to instance
was fixed. But now I got new error: -[FBLPromise firebaseInstallationID]: unrecognized selector sent to instance
.
UPD Problem solved by adding all Firebase libraries to Test target.
I found a different (better?) workaround.
Under my test target build settings, Testing, Test Host Change it from: "$(BUILT_PRODUCTS_DIR)/MyApp.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/MyApp" to: "$(BUILT_PRODUCTS_DIR)/MyApp.app/MyApp"
The BUNDLE_EXECUTABLE_FOLDER_PATH variable was evaluating to empty, so I was seeing a double slash in the path "$(BUILT_PRODUCTS_DIR)/MyApp.app//MyApp"
This solution also worked for me ;) But does have anyone has an Idea why this is the solution to our Problem?
UPD Problem solved by adding all Firebase libraries to Test target.
This worked for me not sure why, we need to do this.
I had all Firebase libraries linked to the test target under Link binary with libraries
which resulted in slow test builds and 3 out of 4 test runs failing with -[FBLPromise HTTPBody]: unrecognized selector sent to instance
. Removing the linked libraries and setting the test host appropriately instead seems to have fixed the issue.
guys, I found really weird solution, here is a short story for a better context I have xcode project with multiple targets, and I have one test bundle for each target to test snapshots. We've added 2 more targets about 6 months ago, I did it, and I added 2 new test bundles, so it's kinda "fresh" in my memory. And now we have to add another one, but I couldn't do that due to
Missing required module
issue. I've tried multiple ways, like switching to pods/SPM, linking binaries for test bundle... But I've noticed one thing:Bundle Loader
setting inBuild settings
had two slashes (see screenshot). When I manually changed value to$(BUILT_PRODUCTS_DIR)/<MyApp>.app/<MyApp>
it worked!
This is definitely xcode 14 issue, because when you change a host for test bundle, it puts two slashes again!
I really hope that will help you, I've spent 3-4 days searching a solution
Thank you SOOOO MUCH !
I'm not sure but I created a project one week ago. Then I added FirebaseFirestore
, Alamofire
and Kingfisher
dependencies from Swift Package Manager
.
When I try to run unit tests. I've got this error:
As @NfoDkt mentioned above. I can see the two double slashes.
XCode Version
@CarlitosDroid you won't see the issue unless the modules are actually required in your tests I think.
I've updated the SPM readme's known issues section to sort issues by most replies, so this will be at the top. Thanks all for posting your workarounds.
The issue persists in Xcode 16, and none of the previous workarounds have resolved it. As a result, I've decided to switch to using Cocoapods for Firebase integration.
I had same issue . Just needed to make sure I had all of these packages in my build phase
[REQUIRED] Step 1: Describe your environment
Swift Package Manager
(select one)iOS
[REQUIRED] Step 2: Describe the problem
Steps to reproduce:
I added three SDKs for now in one of my pet project and it works but when I try to launch unit tests (XCTestCase) I get error "Missing required module 'FirebaseCore'" where @testable import AppName is declared. Do we have any solutions for this? Thanks.
Relevant Code: