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

如何检测Kotlin Multiplatform iOS应用是否运行在模拟器上?

在KMM中判断应用是否运行在模拟器的实现方案

由于Kotlin没有宏定义机制,KMM中需要通过expect/actual跨平台抽象结合各平台的原生判断逻辑来实现类似Swift的模拟器检测功能,具体步骤如下:

1. 共享代码中声明抽象函数

在KMM共享模块的commonMain源码集里,定义一个expect函数作为跨平台统一接口:

expect fun isRunningOnSimulator(): Boolean

2. iOS平台实现实际判断逻辑

在iOS平台的iosMain源码集里,通过调用Swift原生判断逻辑实现actual函数:

首先在iOS的Swift代码中(比如iosApp模块的辅助类)编写模拟器检测方法:

import Foundation

class PlatformHelper {
    static func isRunningOnSimulator() -> Bool {
        #if targetEnvironment(simulator)
        return true
        #else
        return false
        #endif
    }
}

然后在Kotlin的iosMain中实现actual函数:

actual fun isRunningOnSimulator(): Boolean {
    return PlatformHelper.isRunningOnSimulator()
}

3. Android平台实现实际判断逻辑

在Android平台的androidMain源码集里,通过Android系统Build类的特征判断模拟器:

import android.os.Build

actual fun isRunningOnSimulator(): Boolean {
    return Build.FINGERPRINT.startsWith("generic") ||
           Build.FINGERPRINT.startsWith("unknown") ||
           Build.MODEL.contains("google_sdk") ||
           Build.MODEL.contains("Emulator") ||
           Build.MODEL.contains("Android SDK built for x86") ||
           Build.MANUFACTURER.contains("Genymotion") ||
           (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic")) ||
           "google_sdk" == Build.PRODUCT
}

4. 在共享代码中统一调用

完成上述实现后,即可在KMM共享代码中直接使用该函数进行分支处理,效果等同于Swift的宏判断:

if (isRunningOnSimulator()) {
    // 模拟器环境执行逻辑(对应Swift中的foo)
} else {
    // 真机环境执行逻辑(对应Swift中的bar)
}

内容的提问来源于stack exchange,提问作者Anton V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:20:04