KMP 模块里 CocoaPods 如何依赖迁到 Swift Package Manager页面里的入口是 Junie Kotlin AI Skill但迁移本身仍然要回到 Gradle、Xcode 和 Kotlin imports 这几个具体文件。SwiftPM import 现在还是 Alpha示例要求 KMP Gradle 插件使用2.4.0-RC2。项目里如果已经通过 CocoaPods 接了 Firebase、Google Maps 这类 iOS SDK这个迁移就不只是替换包管理器还会影响 iOS 侧构建方式。先看边界这次说的是“在 KMP 模块里引入 SwiftPM 依赖”。也就是说Kotlin 代码可以通过 SwiftPM import 调用 Objective-C APIKotlin/Native 编译和 framework 链接时Gradle 插件会把 SwiftPM 依赖需要的机器码带上。这个功能不等于把使用 SwiftPM import 的 KMP 模块再导出成一个 Swift package。文档里明确写了这个场景还不支持可能不能正常工作。如果你的交付方式是把 shared 模块发布成 Swift package 给 iOS 团队消费这条限制要先确认。另一个边界是动态 Kotlin/Native framework。遇到Undefined symbols for architecture ...、dyld: Symbol not found或者同一个 Objective-C class 在两个 binary 里重复实现时文档给的通用处理方式是把 framework 改成静态kotlin{listOf(iosArm64(), iosSimulatorArm64()).forEach{iosTarget -iosTarget.binaries.framework{baseNameSharedisStatictrue}}}这个点和 CocoaPods 迁移关系很近。以前很多项目会把 framework 配在cocoapods.framework {}里迁到 SwiftPM 后这部分要移到 Apple target 的binaries.framework {}下。Junie 和 SkillJunie 的使用方式比较直接。先安装 CLI然后登录 JetBrains 账号或者配置外部 LLMcurl-fsSLhttps://junie.jetbrains.com/install.sh|bashjunie项目目录下安装 Kotlin AI Skillnpx skillsaddKotlin/kotlin-agent-skills这个命令要求npm不低于5.2.0。交互里选择kotlin-tooling-cocoapods-spm-migrationagent 选择 Juniescope 选择Project这样 Skill 只落在当前项目里。之后在项目根目录启动 Juniejunie输入迁移任务Migrateproject-namefrom CocoaPods to SwiftPMJunie 会识别刚安装的 Skill然后开始检查项目。开始前要保证项目已经在 Git 里因为后面要靠 diff 看它到底改了哪些文件。AI 工具会改对一部分也可能把 Xcode 工程、Podfile 或 imports 改偏不能把生成结果当成最终结论。Gradle 变化SwiftPM import 要求 Kotlin Multiplatform Gradle plugin 使用2.4.0-RC2。如果项目用 Version Catalog版本入口大概是这样[versions]kotlin2.4.0-RC2[plugins]kotlin-multiplatform{idorg.jetbrains.kotlin.multiplatform, version.refkotlin}依赖迁移时不要一开始就删 CocoaPods。文档里的顺序是先加swiftPMDependencies {}让 SwiftPM 和 CocoaPods 依赖短时间并存等 SwiftPM import 能解析、Kotlin 代码也能编译再清理 CocoaPods。以FirebaseAnalytics为例build.gradle.kts里会多一个 Swift package 声明kotlin{iosArm64()iosSimulatorArm64()swiftPMDependencies{swiftPackage(urlurl(https://github.com/firebase/firebase-ios-sdk.git), versionfrom(12.5.0), productslistOf(product(FirebaseAnalytics)),)}cocoapods{pod(FirebaseAnalytics){version12.5.0}}}如果 Swift package 里的 Clang module 名称和 product 名称不一致就不能只写 product。discoverClangModulesImplicitly false之后需要用importedClangModules明确列出来。FirebaseFirestore 的 Objective-C API 就在文档示例里的FirebaseFirestoreInternalmodule 中。kotlin{swiftPMDependencies{discoverClangModulesImplicitlyfalseswiftPackage(urlurl(https://github.com/firebase/firebase-ios-sdk.git), versionfrom(12.5.0), productslistOf(product(FirebaseAnalytics), product(FirebaseFirestore),), importedClangModuleslistOf(FirebaseAnalytics,FirebaseFirestoreInternal,),)}}多 Apple target 项目还要看平台约束。比如 Google Maps SDK 当前只支持 iOS target项目里如果同时有iosArm64()和macosArm64()产品声明要限制到 iOSkotlin{iosArm64()iosSimulatorArm64()macosArm64()swiftPMDependencies{swiftPackage(urlurl(https://github.com/googlemaps/ios-maps-sdk.git), versionexact(10.3.0), productslistOf(product(GoogleMaps, platformssetOf(iOS()))))}}最后KMP在你们的工程项目中占比多少了呢[#Kotlin](javascript: [#KMP](javascript: [#SwiftPM](javascript: [#CocoaPods](javascript: [#AI编程](javascript:
KMP 正式支持 SwiftPM:CocoaPods 迁移配置指南
KMP 模块里 CocoaPods 如何依赖迁到 Swift Package Manager页面里的入口是 Junie Kotlin AI Skill但迁移本身仍然要回到 Gradle、Xcode 和 Kotlin imports 这几个具体文件。SwiftPM import 现在还是 Alpha示例要求 KMP Gradle 插件使用2.4.0-RC2。项目里如果已经通过 CocoaPods 接了 Firebase、Google Maps 这类 iOS SDK这个迁移就不只是替换包管理器还会影响 iOS 侧构建方式。先看边界这次说的是“在 KMP 模块里引入 SwiftPM 依赖”。也就是说Kotlin 代码可以通过 SwiftPM import 调用 Objective-C APIKotlin/Native 编译和 framework 链接时Gradle 插件会把 SwiftPM 依赖需要的机器码带上。这个功能不等于把使用 SwiftPM import 的 KMP 模块再导出成一个 Swift package。文档里明确写了这个场景还不支持可能不能正常工作。如果你的交付方式是把 shared 模块发布成 Swift package 给 iOS 团队消费这条限制要先确认。另一个边界是动态 Kotlin/Native framework。遇到Undefined symbols for architecture ...、dyld: Symbol not found或者同一个 Objective-C class 在两个 binary 里重复实现时文档给的通用处理方式是把 framework 改成静态kotlin{listOf(iosArm64(), iosSimulatorArm64()).forEach{iosTarget -iosTarget.binaries.framework{baseNameSharedisStatictrue}}}这个点和 CocoaPods 迁移关系很近。以前很多项目会把 framework 配在cocoapods.framework {}里迁到 SwiftPM 后这部分要移到 Apple target 的binaries.framework {}下。Junie 和 SkillJunie 的使用方式比较直接。先安装 CLI然后登录 JetBrains 账号或者配置外部 LLMcurl-fsSLhttps://junie.jetbrains.com/install.sh|bashjunie项目目录下安装 Kotlin AI Skillnpx skillsaddKotlin/kotlin-agent-skills这个命令要求npm不低于5.2.0。交互里选择kotlin-tooling-cocoapods-spm-migrationagent 选择 Juniescope 选择Project这样 Skill 只落在当前项目里。之后在项目根目录启动 Juniejunie输入迁移任务Migrateproject-namefrom CocoaPods to SwiftPMJunie 会识别刚安装的 Skill然后开始检查项目。开始前要保证项目已经在 Git 里因为后面要靠 diff 看它到底改了哪些文件。AI 工具会改对一部分也可能把 Xcode 工程、Podfile 或 imports 改偏不能把生成结果当成最终结论。Gradle 变化SwiftPM import 要求 Kotlin Multiplatform Gradle plugin 使用2.4.0-RC2。如果项目用 Version Catalog版本入口大概是这样[versions]kotlin2.4.0-RC2[plugins]kotlin-multiplatform{idorg.jetbrains.kotlin.multiplatform, version.refkotlin}依赖迁移时不要一开始就删 CocoaPods。文档里的顺序是先加swiftPMDependencies {}让 SwiftPM 和 CocoaPods 依赖短时间并存等 SwiftPM import 能解析、Kotlin 代码也能编译再清理 CocoaPods。以FirebaseAnalytics为例build.gradle.kts里会多一个 Swift package 声明kotlin{iosArm64()iosSimulatorArm64()swiftPMDependencies{swiftPackage(urlurl(https://github.com/firebase/firebase-ios-sdk.git), versionfrom(12.5.0), productslistOf(product(FirebaseAnalytics)),)}cocoapods{pod(FirebaseAnalytics){version12.5.0}}}如果 Swift package 里的 Clang module 名称和 product 名称不一致就不能只写 product。discoverClangModulesImplicitly false之后需要用importedClangModules明确列出来。FirebaseFirestore 的 Objective-C API 就在文档示例里的FirebaseFirestoreInternalmodule 中。kotlin{swiftPMDependencies{discoverClangModulesImplicitlyfalseswiftPackage(urlurl(https://github.com/firebase/firebase-ios-sdk.git), versionfrom(12.5.0), productslistOf(product(FirebaseAnalytics), product(FirebaseFirestore),), importedClangModuleslistOf(FirebaseAnalytics,FirebaseFirestoreInternal,),)}}多 Apple target 项目还要看平台约束。比如 Google Maps SDK 当前只支持 iOS target项目里如果同时有iosArm64()和macosArm64()产品声明要限制到 iOSkotlin{iosArm64()iosSimulatorArm64()macosArm64()swiftPMDependencies{swiftPackage(urlurl(https://github.com/googlemaps/ios-maps-sdk.git), versionexact(10.3.0), productslistOf(product(GoogleMaps, platformssetOf(iOS()))))}}最后KMP在你们的工程项目中占比多少了呢[#Kotlin](javascript: [#KMP](javascript: [#SwiftPM](javascript: [#CocoaPods](javascript: [#AI编程](javascript: