KMM-iOS端如何实现iOS版本运行时检测及API可用性判断?
在KMM iOS端实现API版本检测的方案
KMM中没有像Swift那样原生的#available语法,但可以通过以下两种方式实现类似的API可用性检查:
方案一:跨平台版本判断(适用于共享代码)
通过expect/actual机制获取iOS系统版本,再进行版本号比较:
- 在common源集定义期望函数
expect fun getIosSystemVersion(): String
- 在iOS源集实现实际函数
import platform.UIKit.UIDevice actual fun getIosSystemVersion(): String { return UIDevice.currentDevice.systemVersion }
- 编写版本比较工具函数
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
相关产品推荐
相关产品推荐

