程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何正确导入 Kotlin Multiplatform 项目(并且只在构建时运行必要的任务)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何正确导入 Kotlin Multiplatform 项目(并且只在构建时运行必要的任务)?

开发过程中遇到如何正确导入 Kotlin Multiplatform 项目(并且只在构建时运行必要的任务)的问题如何解决?下面主要结合日常开发的经验,给出你关于如何正确导入 Kotlin Multiplatform 项目(并且只在构建时运行必要的任务)的解决方法建议,希望对你解决如何正确导入 Kotlin Multiplatform 项目(并且只在构建时运行必要的任务)有所启发或帮助;

在导入 Kotlin 多平台项目的情况下开发 androID 应用程序时,是否可以不运行所有 iOS(kotlin/Native)任务(cinterop + cocoapods)?

我们当前的 KMP 项目(Sharedlibrary)结构是:

Sharedlibrary
 - build.gradle.kts
 - setTings.gradle.kts
 - ...
 - shared
   - build.gradle.kts
     - commonMain
     - androIDMain (androID library target)
     - ...  

我们有一个单独的 AndroID 项目 (SomeApp)其中包含以下设置来导入我们的共享库。

// setTings.gradle.kts
include ":shared"
project(":shared").projectDir = file("../Sharedlibrary/shared")

问题是……这是一种非常烦人的开发模式,尤其是因为 iOS 工件(cinterop + cocoapods 等)每次发生变化时都会重新构建,即使我只关心 androID 库工件。

我尝试过的事情:

  • 我尝试切换到复合构建,但出现与 gradle 无法找到多平台插件相关的错误。
  • 我正在虑改用本地 Maven,但这肯定会减慢开发过程,所以我很抗拒。

这是我们设置的问题吗?还是任务只是相互依赖,没有办法解决?

解决方法

您可以像这样从构建中排除 iOS 目标:

kotlin {
    android()
    // kotlin.native.cocoapods.target property passed by cocoapods build from Xcode 
    val shouldBuildIos = project.findProperty("kotlin.native.cocoapods.target") != null
    if (shouldBuildIos) {
        ios()
        cocoapods {
            // ...
        }
    }
    sourceSets {
        // ...
        if (shouldBuildIos) {
            val iosmain by getTing {
                libDependencies(
                    "ktor.client.ENGIne.ios",)
            }
        }
    }
}

在这种情况下,您将不会在 IDE 中获得任何代码建议。还要小心,因为在这种情况下您的 podspec 将被删除。

如果您只在 android 部分工作,而另一个开发人员正在开发 iOS 部分,您可以在 local.properties 中创建您自己的属性,并确保您不会推送删除 podspec 文件(或只是忽略它) )

但如果你是一个单一的开发者,这不是一个好的选择。我也遇到过很长的 cocoapods 构建时间,因此决定将其从多平台模块中移出。

每次我需要它时,我都会在公共代码中创建一个接口,并从 iOS 部分传递一个实现它的实例或一个“生成器”函数(如果你不想创建一个对象,除非它需要)。>

在 iOS 部分,它@R_944_7957@:

featureProvider = FeatureProvider(
    context: .init(
        rootController: rootViewController,application: application,launchOptions: launchOptions
    ),providerGenerator: { socialNetwork,context -> CredentialProvider in
        switch socialNetwork {
        case .facebook:
            return FacebookProvider(context: context)
            
        case .google:
            return GoogleProvider(context: context)
            
        default: fatalError()
        }
    }
)
,

只想从支持者的角度谈谈这个问题。

我发现这个 YouTrack 问题似乎相关:https://youtrack.jetbrains.com/issue/KT-43796。请检查这是否正确描述了您的问题,如果没有,请在此处发表评论。此外,这是获取问题状态更新的最佳位置。

大佬总结

以上是大佬教程为你收集整理的如何正确导入 Kotlin Multiplatform 项目(并且只在构建时运行必要的任务)全部内容,希望文章能够帮你解决如何正确导入 Kotlin Multiplatform 项目(并且只在构建时运行必要的任务)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。