You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KMM跨平台相机功能实现:iOS端图片保存与结果回传至共享代码问题求助

KMM跨平台相机功能实现:iOS端图片保存与结果回传至共享代码问题求助

我现在正在开发一个Kotlin Multiplatform Mobile(KMM)应用,想要实现一套统一的相机功能,让用户能在Android和iOS上拍照并保存到设备文件系统里。Android端的实现已经顺利完成了,但iOS这边找合适的方案、落地的时候遇到了不少麻烦。

iOS端我打算用UIImagePickerController来捕获照片,之后把拍到的图片存到文件系统里。我的核心目标是把这个功能无缝集成到共享的KMM代码里,保证两端的复用性和一致性。

我试着在iosMain里写了个CameraManager类,用了UIImagePickerController,但现在卡在了怎么正确保存捕获到的图片,还有怎么把结果回传给共享代码上。

我的CameraManager大致是这样的:

actual class CameraManager : NSObject(), UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    private var onImagePicked: ((String?) -> Unit)? = null

    fun launchCamera(onImagePicked: ((String?) -> Unit)?, viewController: UIViewController) {
        this.onImagePicked = onImagePicked
        val imagePicker = UIImagePickerController()
        imagePicker.sourceType = UIImagePickerControllerSourceType.Camera
        imagePicker.delegate = this
        viewController.presentViewController(imagePicker, animated = true, completion = null)
    }

    override fun imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: Map<NSObject, *>) {
        picker.dismissViewControllerAnimated(true, null)
        val image = info[UIImagePickerControllerOriginalImage] as? UIImage
        handleImagePickerResult(image)
    }

    override fun imagePickerControllerDidCancel(picker: UIImagePickerController) {
        picker.dismissViewControllerAnimated(true, null)
        onImagePicked?.invoke(null)
    }

    private fun handleImagePickerResult(image: UIImage?) {
        image ?: run {
            onImagePicked?.invoke(null)
            return
        }
        // 这里就是我卡壳的地方:不知道怎么把UIImage保存到文件系统,拿到路径后回传给共享代码
    }
}

我现在的主要困惑点有这些:

  • 怎么把UIImage正确保存到iOS的文件系统中,获取到能被共享代码直接使用的本地文件路径?
  • 怎么在UIImagePickerController的回调里,把保存后的文件路径正确传递给共享代码里的回调函数?
  • 有没有符合KMM最佳实践的方式,让iOS端的相机逻辑和共享层的交互更顺畅?

希望有大佬能给我指个方向,或者提供一些可行的代码示例,谢谢!

备注:内容来源于stack exchange,提问作者Fourty-Three

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:12:57