在 Kotlin Multiplatform Mobile 中查找应用程序版本代码
Find application version code in Kotlin Multiplatform Moblie
我想在 Kmm 中查找应用程序版本代码。在特定平台即
Android
var versionCode = BuildConfig.VERSION_CODE
会return1.1
iOS
let appVersion = "iOS " + (Bundle.main.versionNumber ?? "")
会return1.1
如何在特定平台的 Kmm 中执行操作?
更新
我尝试了 expect/actual 但我遇到了一些错误。
CommonMain
expect class Platform() {
val versionCode: String
}
iosMain
actual class Platform actual constructor() {
actual val versionCode =
platform.Foundation.NSBundle.mainBundle.infoDictionary?.get("CFBundleVersion")
}
iOS 侧错误
android主要
actual class Platform actual constructor() {
actual val versionCode = BuildConfig.VERSION_CODE
}
android 端出错
KMM 没有对此类功能的一些内置支持。
一个选项是创建一个 expect
函数并在 actual
中为每个平台应用 platform-specific 代码。
我曾经将应用程序版本与模块版本同步,但如果你不能这样做,你可以在你的应用程序模块中创建 Platform
并将其传递给你的公共模块:
共同主线:
expect class Platform { // remove constructor here
val versionCode: String
}
Android 主要:
actual class Platform(actual val versionCode: String)
然后在应用程序模块中,您只需创建它 Platform(BuildConfig.VERSION_CODE.toString())
并根据您的架构将其传递到您的共享模块中。
另一种选择是使用 BuildKonfig 插件:它将像 Android 插件一样生成配置文件,具体取决于您在 build.gradle
文件中指定的内容:
buildkonfig {
packageName = "com.example.app"
defaultConfigs {
buildConfigField(STRING, "VERSION_CODE", "1.0")
}
}
用法:
com.example.app.BuildKonfig.VERSION_CODE
如果您想要 shared
module/framework 版本,我只会使用 expect/actual
。
但是,如果您正在构建 KMM 应用程序,我怀疑您需要的版本是应用程序版本,而不是 shared
模块的版本。
我会选择 AppConfig
interface/protocol,例如:
interface AppConfig {
val version: String
}
然后从您的 androidApp
和 iosApp
中提供 IosAppConfig
和 AndroidAppConfig
实现。
我想在 Kmm 中查找应用程序版本代码。在特定平台即
Android
var versionCode = BuildConfig.VERSION_CODE
会return1.1
iOS
let appVersion = "iOS " + (Bundle.main.versionNumber ?? "")
会return1.1
如何在特定平台的 Kmm 中执行操作?
更新
我尝试了 expect/actual 但我遇到了一些错误。
CommonMain
expect class Platform() {
val versionCode: String
}
iosMain
actual class Platform actual constructor() {
actual val versionCode =
platform.Foundation.NSBundle.mainBundle.infoDictionary?.get("CFBundleVersion")
}
iOS 侧错误
android主要
actual class Platform actual constructor() {
actual val versionCode = BuildConfig.VERSION_CODE
}
android 端出错
KMM 没有对此类功能的一些内置支持。
一个选项是创建一个 expect
函数并在 actual
中为每个平台应用 platform-specific 代码。
我曾经将应用程序版本与模块版本同步,但如果你不能这样做,你可以在你的应用程序模块中创建 Platform
并将其传递给你的公共模块:
共同主线:
expect class Platform { // remove constructor here
val versionCode: String
}
Android 主要:
actual class Platform(actual val versionCode: String)
然后在应用程序模块中,您只需创建它 Platform(BuildConfig.VERSION_CODE.toString())
并根据您的架构将其传递到您的共享模块中。
另一种选择是使用 BuildKonfig 插件:它将像 Android 插件一样生成配置文件,具体取决于您在 build.gradle
文件中指定的内容:
buildkonfig {
packageName = "com.example.app"
defaultConfigs {
buildConfigField(STRING, "VERSION_CODE", "1.0")
}
}
用法:
com.example.app.BuildKonfig.VERSION_CODE
如果您想要 shared
module/framework 版本,我只会使用 expect/actual
。
但是,如果您正在构建 KMM 应用程序,我怀疑您需要的版本是应用程序版本,而不是 shared
模块的版本。
我会选择 AppConfig
interface/protocol,例如:
interface AppConfig {
val version: String
}
然后从您的 androidApp
和 iosApp
中提供 IosAppConfig
和 AndroidAppConfig
实现。