十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何使用 swift-export-standalone 将 Kotlin klib 转换为 Swift 模块?

如何使用 swift-export-standalone 将 Kotlin klib 转换为 Swift 模块? 如何使用 swift-export-standalone 将 Kotlin klib 转换为 Swift 模块【免费下载链接】kotlinThe Kotlin Programming Language.项目地址: https://gitcode.com/GitHub_Trending/ko/kotlin如果你已经有一批编译好的 Kotlin klib想不依赖 Kotlin Gradle Plugin 直接把它翻译成可调用的 Swift 模块Kotlin 仓库中的 swift-export-standalone 提供了这条路径。它的设计目标是给构建工具使用接收一组相互关联的 klib输出一组Swift modules每个模块包含一个描述最终 API 的.swift文件以及调用编译后 Kotlin 代码所需的桥接见 执行模型文档。需要先明确Swift export 目前仍处于非常早期的开发阶段API 面不稳定文档可能落后于实现README 中有明确警告。开始前必须满足的前置条件执行模型文档 和 README 给出了以下硬性前提输入模块必须是预先编译好的 klib。Standalone Executor 要求待转换的模块全部是预编译产物这保证了输入合法性并统一输入格式一切都以 klib 呈现。公开 API 涉及的每个模块都要传入。依赖树会被构建工具展平后交给 RunnerRunner 自己负责为生成的 Swift 模块重建依赖图。需要一个 Kotlin/Native 发行版。Swift export 需要它来解析对 stdlib 的引用运行时通过konanHome指定其位置。版本对齐Swift export 与 Analysis API 制品的版本号可能不一致且都尚未稳定README 建议使用当前可用的最新版本。配置 Gradle 工程仓库 依赖不经过 KGP 使用 Swift export 时README 给出的配置分两步。第一步添加 Maven 仓库maven(https://redirector.kotlinlang.org/maven/dev)第二步添加三个依赖。注意依赖名是swift-export-embeddableREADME 原注释提醒确保使用制品的最新版本// Make sure to use the latest versions of artifacts. val kotlinVersion 2.0.20-dev- implementation(org.jetbrains.kotlin:kotlin-native-utils:$kotlinVersion) implementation(org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlinVersion) implementation(org.jetbrains.kotlin:swift-export-embeddable:$kotlinVersion)调用 runSwiftExport 执行转换依赖就绪后通过 Swift export API 发起转换。README 给出的调用形式如下代码中ModuleName、path-to-input-klib、path-to-output-artifacts是需要替换的占位值konanHome指向你的 Kotlin/Native 发行版目录val inputModule InputModule.Binary(ModuleName, Path(path-to-input-klib)) val config SwiftExportConfig( outputPath Path(path-to-output-artifacts), distribution Distribution( konanHome $HOME/.konan/some-kotlin-native-distribution ), ) val result runSwiftExport(inputModule, config) // explore the result!该入口实现位于 SwiftExportRunner.ktrunSwiftExport函数。执行时 Runner 对每个输入 klib 各建一个 Analysis API Session为当前模块创建一个合成的 source 模块并把所有二进制模块作为它的依赖以扁平列表传入无需重建真实依赖图然后对每个会话执行一次单模块翻译。翻译结束后Runner 收集各 SwiftModule 的imports把它们转换成最终 Swift 模块的依赖图。验证转换结果README 对结果的确认方式是检查返回值原文注释即explore the result!。判断产出是否合理可以对照 执行模型文档 与 架构文档 描述的预期形态每个 Swift module 由描述最终 API 的.swift文件构成并可包含调用 Kotlin 代码的桥接。多模块场景下会多出一个合成的ExportedKotlinPackages模块在源模块中没有对应物它存放一棵用 Swift enum 嵌套表示的 Kotlin 包层级树供各模块通过_exported import共享命名空间。这样不同模块中同名 Kotlin 包不会各自生成重复的 enum。依赖图会被“拉直”某个 Swift 模块的传递依赖会被提升为直接依赖Gradle 侧声明为api但实际未使用的依赖也会被清理使 Swift 侧依赖图尽量精确。需要注意的限制与行为语言子集当前 Swift export 只支持 Kotlin 语言的一个子集。按 映射文档类方面仅支持直接继承自Any的 final 类翻译成继承KotlinRuntime.KotlinBase的 Swift 类函数仅支持简单的顶层函数和方法不支持suspend、inline、operator和扩展函数Unit映射为VoidNothing映射为Never。模块划分责任在调用方klib 格式不区分api与implementation依赖所以“哪些模块构成公开 API”无法自动判断。执行模型文档说明这是使用者的职责——公开 API 涉及的模块必须全部传入否则翻译会在遇到未知类型时要么报错要么把类型翻译成Swift.Never这两种结果都不是期望的。桥接机制Swift 侧的包装通过 C 头文件暴露的 Kotlin 桥来调用编译后的 Kotlin 代码C header KotlinBridges 由 Kotlin/Native 编译器编译的库机制细节见 compiler-bridges.md。整体状态README 强调 Swift export “远未达到 Alpha 状态”API 面没有任何稳定性保证如果想先看一个完整的 KMP 集成示例官方指向了 swift-export-sample 仓库与 Kotlin Playground均为仓库外部资源。生成的 Swift 源、C 桥接头和 Kotlin 二进制最终需要由 Gradle 或其他构建系统打包成 Framework / XCFramework / Swift Package 等产物见 架构文档 中的流程图——这部分属于构建工具侧的工作本仓库文档未给出具体打包配置。【免费下载链接】kotlinThe Kotlin Programming Language.项目地址: https://gitcode.com/GitHub_Trending/ko/kotlin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表