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

Kotlin Multiplatform:如何自动将版本写入iOS的Info.plist?

自动将KMM项目版本写入iOS Info.plist的方法

当然可以实现,以下是几种可靠的方案:

方案一:通过KMM iOS框架配置直接注入版本

在项目根目录或模块的build.gradle.kts中,针对iOS目标的framework配置直接设置Info.plist的版本字段:

kotlin {
    ios {
        binaries.framework {
            baseName = "YourFrameworkName" // 替换成你的框架名称
            // 配置Info.plist的版本项
            infoPlist {
                // 显示给用户的版本号(对应CFBundleShortVersionString)
                setProperty("CFBundleShortVersionString", project.version)
                // 内部构建版本号(对应CFBundleVersion,可与上面一致或单独设置)
                setProperty("CFBundleVersion", project.version)
            }
        }
    }
    // 其他平台配置...
}

执行assembleXcFramework后,生成的框架Info.plist会自动填充你设置的version = "1.1.9"。

方案二:基于自定义Info.plist模板替换占位符

如果需要自定义Info.plist的其他内容,可以先创建模板文件:

  1. 在模块的src/iosMain/resources/下创建Info.plist模板,加入版本占位符:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleShortVersionString</key>
    <string>APP_VERSION</string>
    <key>CFBundleVersion</key>
    <string>BUILD_VERSION</string>
    <!-- 其他必填字段(如CFBundleIdentifier等) -->
</dict>
</plist>
  1. 在build.gradle.kts中读取模板并替换占位符:
kotlin {
    ios {
        binaries.framework {
            baseName = "YourFrameworkName"
            infoPlist = file("src/iosMain/resources/Info.plist").readText()
                .replace("APP_VERSION", project.version.toString())
                .replace("BUILD_VERSION", project.version.toString())
        }
    }
}

方案三:通过Gradle任务修改已生成的Info.plist

如果需要在构建完成后统一修改XCFramework中的所有Info.plist,可以添加Gradle任务:

tasks.named("assembleXcFramework") {
    doLast {
        val xcFrameworkDir = layout.buildDirectory.dir("xcframeworks/YourFrameworkName.xcframework").get().asFile
        // 遍历XCFramework下所有的Info.plist文件
        xcFrameworkDir.walk().filter { it.name == "Info.plist" }.forEach { plistFile ->
            // 使用macOS自带的PlistBuddy工具修改版本
            exec {
                commandLine(
                    "/usr/libexec/PlistBuddy",
                    "-c", "Set :CFBundleShortVersionString ${project.version}",
                    plistFile.absolutePath
                )
            }
            exec {
                commandLine(
                    "/usr/libexec/PlistBuddy",
                    "-c", "Set :CFBundleVersion ${project.version}",
                    plistFile.absolutePath
                )
            }
        }
    }
}

注意事项

  • 确保project.version的格式符合Apple版本号规范(如x.y.z,无特殊字符)
  • 如果需要区分显示版本和构建版本,可以将CFBundleVersion设置为单独的构建号(比如结合Git提交次数、时间戳等)
  • 执行assembleXcFramework前,建议先执行clean任务避免缓存影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:17:30