Как стать автором
Обновить

Комментарии 6

Спасибо за статью, как раз вовремя) В вашем проекте Network Provider находиться в КММ что не совсем удобно лично для меня так как использую Bagel для мониторинга сетевой активности, Preview Device in Xcode (не работает с асинхронными данными), использование mocks для тестов поэтому планирую иметь Network Provider для android и iOS раздельный. С Kotlin и KMM совсем не знаком так как разрабатываю сугубо под Apple поэтому возможно задам элементарный вопрос. Как правильно передавать iOS Network Provider в КММ с последующим его вызовом в нем, провайдер будет написан через New Concurrency Model(async/await)?

Попробуйте сделать интерфейс-протокол в KMM общем коде и реализовать его в вашем провайдере. Ссылку на провайдер нужно будет передавать со стороны iOS приложения в точке инициализации.
Ожидаем, когда появится возможность писать такую инициализацию в Kotlin Native коде

Я пытался запустить ваш проект на GitHub под iOS в логах вижу kotlin.IllegalStateException: There is no event loop. Use runBlocking { ... } to start one
на сколько я понимаю swift не может правильно вызвать suspend fun.

Можете, показать, что именно и откуда вы вызываете?

Я создал простой пример для чистоты эксперемента https://github.com/filimo/KMM_Demo. В ContentView.swift на onAppear я дергаю repository.getControlsList который описан как suspend fun getControlsList(), результат в SwiftUI не приходит в логах вижу KotlinException=kotlin.IllegalStateException: There is no event loop. Use runBlocking { ... } to start one., KotlinExceptionOrigin=}


Установлен Xcode 13.2.1

Смотрите, тут есть нюанс вызова. suspend функции хоть в iOS, хоть в Android нужно вызывать в CoroutineScope. В моем примере я именно так и вызываю. Либо я иду через компонент общей архитектуры, где у меня есть скоуп вызова. Либо я использую flows обертку, внутри которой есть свой скоуп.
github.com/anioutkazharkova/kn_network_sample/blob/main/classic/iosApp/iosApp/NewsListModel.swift
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории