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

KMM-iOS端如何实现iOS版本运行时检测及API可用性判断?

在KMM iOS端实现API版本检测的方案

KMM中没有像Swift那样原生的#available语法,但可以通过以下两种方式实现类似的API可用性检查:

方案一:跨平台版本判断(适用于共享代码)

通过expect/actual机制获取iOS系统版本,再进行版本号比较:

  1. 在common源集定义期望函数
expect fun getIosSystemVersion(): String
  1. 在iOS源集实现实际函数
import platform.UIKit.UIDevice

actual fun getIosSystemVersion(): String {
    return UIDevice.currentDevice.systemVersion
}
  1. 编写版本比较工具函数
fun isIosVersionAtLeast(major: Int, minor: Int = 0, patch: Int = 0): Boolean {
    val versionComponents = getIosSystemVersion().split(".").mapNotNull { it.toIntOrNull() }
    val currentMajor = versionComponents.getOrElse(0) { 0 }
    val currentMinor = versionComponents.getOrElse(1) { 0 }
    val currentPatch = versionComponents.getOrElse(2) { 0 }

    return when {
        currentMajor > major -> true
        currentMajor == major -> {
            when {
                currentMinor > minor -> true
                currentMinor == minor -> currentPatch >= patch
                else -> false
            }
        }
        else -> false
    }
}

使用示例:

if (isIosVersionAtLeast(14)) {
    // iOS 14及以上版本逻辑
} else {
    // 低版本兼容逻辑
}

方案二:iOS原生API检查(仅适用于iOS目标代码)

直接调用iOS Foundation框架的NSProcessInfo来判断系统版本:

import platform.Foundation.NSProcessInfo
import platform.Foundation.NSOperatingSystemVersion

fun isIos14OrLater(): Boolean {
    val requiredVersion = NSOperatingSystemVersion(14, 0, 0)
    return NSProcessInfo.processInfo.isOperatingSystemAtLeastVersion(requiredVersion)
}

使用示例:

if (isIos14OrLater()) {
    // iOS 14+专属逻辑
} else {
    // 低版本 fallback
}

注意事项

  • 方案一可在共享代码中使用,但需确保非iOS平台不会调用该版本判断逻辑(可通过isIOS平台标识防护)。
  • 方案二仅能在iOS源集(如iosMain)中使用,依赖iOS原生框架。

内容的提问来源于stack exchange,提问作者Tam Nguyen Huy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:35:17