icerockdev / moko-resources

Resources access for mobile (android & ios) Kotlin Multiplatform development
https://moko.icerock.dev/
Apache License 2.0
1.12k stars 125 forks source link

Crash when using MR.strings() in unit tests iOS #714

Open zvona031 opened 6 months ago

zvona031 commented 6 months ago

I modularized my app with local SPM and I am trying to create tests for each module. But after running the test where I use MR.strings()...... I get the following crash At the end of the error it says: Caused by: kotlin.IllegalArgumentException: bundle with identifier org.undabot.inventory.shared.main not found. Is there any additional setup needed for the tests?

image (1) image

Alex009 commented 6 months ago

hi. your tests in swift? not in kotlin?

if yes - i think you should add build phase with copy resources to Tests Xcode target too

zvona031 commented 6 months ago

Yes, my tests are in Swift. The thing is that I do not have Test target where I could add build phase. I have tests directly in the local SPM package (image below) Is the solution in that situation the same or it changes something? Can I find the sample of my situation somewhere, and how exactly the build phase looks?

Alex009 commented 6 months ago

@zvona031 looks like you should create special Plugin for run gradle task - https://github.com/apple/swift-package-manager/blob/main/Documentation/Plugins.md

or you can change you module type from staticLibrary to dynamic

zvona031 commented 6 months ago

Since I have never used Swift package build plugins, it is a bit confusing to me. Have you ever done something similar yourself?

Alex009 commented 6 months ago

@zvona031 no

zvona031 commented 6 months ago

Out of curiosity, how are the resources even working when I build my app, since I have static library and am not running any scripts for copying the resources. I am having a monorepo (shared, Android and iOS app), is that effecting this somehow?

Alex009 commented 6 months ago

@zvona031 to works with static library in xcode should be added build phase that described in readme

zvona031 commented 6 months ago

I saw that, but I did not add anything to my build phase, and it still works somehow. I am importing the shared code with SPM which is built using the KMMBridge.

JuliaJakubcova commented 6 months ago

Hi, I have the same issue. On the project we use SPM and we have a monorepo as well, but the differences are dynamic framework as opposed to static and we have the build phase. The tests look okay, MR strings are being suggested by autocomplete in Xcode, but they crash in runtime, seems the MR class is not found IllegalArgumentException: bundle with identifier kmp.shared.MR not found. I will be very thankful for any advice.

zvona031 commented 4 months ago

Is it possible to get some help or advice regarding this issue?

MAX-POLKOVNIK commented 2 months ago

@zvona031 you can try my solution for SwiftUI previews - https://github.com/icerockdev/moko-resources/issues/747#issuecomment-2330854244