Как получить доступ к классам, методам и отправить параметры из нативного iOS в приложение KMP?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как получить доступ к классам, методам и отправить параметры из нативного iOS в приложение KMP?

Сообщение Anonymous »

Когда я запускаю приложение для iOS, я хочу отправлять параметры из Firebase в мой проект KMP. /> Вот коды и ссылка на проект.import SwiftUI
import FirebaseCore
import ComposeApp

@main
struct iOSApp: App {

init() {
FirebaseApp.configure()

let swiftFirebaseRemoteConfig = SwiftFirebaseRemoteConfig()
KoinInitKt.someFunctionThatNeedsSwift(isVercade: true) //Works

KoinInitKt.someFunctionThatNeedsSwiftToRead(firebaseRemoteconfig: swiftFirebaseRemoteConfig)
//error Type 'KoinInitKt' has no member 'someFunctionThatNeedsSwiftToRead'

}

var body: some Scene {
WindowGroup {
ContentView()
}
}

}
< /code>
Swift Class для моего проекта KMP < /p>
@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING")
@OptIn(ExperimentalObjCName::class, BetaInteropApi::class)
@ObjCName(name = "KoinInit", exact = true)
@ExportObjCClass
actual class KoinInit(@ObjCName("delegate") delegate: SwiftFirebaseRemoteConfig) {

init {
doInitKoin(delegate = delegate)
}

fun initKoin(delegate: SwiftFirebaseRemoteConfig) {
startKoin {
modules(modules = moduleIos(delegate))
}
}

fun doInitKoin(delegate: SwiftFirebaseRemoteConfig) = initKoin(delegate)

}

fun someFunctionThatNeedsSwift(isVercade: Boolean) {
KmpLogger.d("someFunctionThatNeedsSwift", "receiver delegate $isVercade")
}

fun someFunctionThatNeedsSwiftToRead(firebaseRemoteconfig: SwiftFirebaseRemoteConfig) {
KmpLogger.d("someFunctionThatNeedsSwift", "receiver delegate amem")
val swiftFirebaseRemoteConfig: SwiftFirebaseRemoteConfig = (firebaseRemoteconfig)
KoinInit(delegate = swiftFirebaseRemoteConfig)
}
< /code>
composeapp .h автоматически генерировать < /p>
__attribute__((objc_subclassing_restricted))
__attribute__((swift_name("KoinInitKt")))
@interface ComposeAppKoinInitKt : ComposeAppBase
+ (void)someFunctionThatNeedsSwiftIsVercade:(BOOL)isVercade __attribute__((swift_name("someFunctionThatNeedsSwift(isVercade:)")));
+ (void)someFunctionThatNeedsSwiftToReadFirebaseRemoteconfig:(SwiftFirebaseRemoteConfig *)firebaseRemoteconfig __attribute__((swift_name("someFunctionThatNeedsSwiftToRead(firebaseRemoteconfig:)")));
@end
< /code>
Классы интерполируются для видимых в KMP (используйте .d файл в KMP)
import firebaseremoteconfig
import composeapp < ​​/p>
@objc public class SwiftFirebaseRemoteConfig: NSObject, FirebaseRemoteConfigs {
let remoteConfig = RemoteConfig.remoteConfig()

@objc public func fetchAndActivateFirebaseRemoteConfigs(fetchIntervalInSeconds: Double) {
remoteConfig.configSettings.minimumFetchInterval = fetchIntervalInSeconds
remoteConfig.fetchAndActivate()
}

@objc public func getRemoteConfigString(key: String) -> String? {
return remoteConfig.configValue(forKey: key).stringValue as String?
}

}

#import
#import

@interface SwiftFirebaseRemoteConfig : NSObject

- (void)fetchAndActivateFirebaseRemoteConfigsWithFetchIntervalInSeconds:(double)fetchIntervalInSeconds;
- (NSString * _Nullable)getRemoteConfigStringWithKey:(NSString * _Nonnull)key;

@end


Подробнее здесь: https://stackoverflow.com/questions/796 ... the-kmp-ap
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»