【问题标题】:Nested multiplatform libraries usage with cocoapods intergration嵌套多平台库与 cocoapods 集成的使用
【发布时间】:2021-12-23 00:44:39
【问题描述】:

在 Android 世界中,我可以在一个模块中添加一个依赖项,对于任何将此模块添加为依赖项的模块,它都可以使用该依赖项中的 API。例如facebook sdk -> utils 模块 -> foo 模块 -> 主应用程序模块,foo 模块和主应用程序模块也可以使用 facebook sdk API。

我如何在多平台世界(或 iOS 世界)中做同样的事情? facebook iOS sdk pod -> utils 模块 -> foo 模块 -> iOS 主项目

我尝试仅在 utils 模块中添加 pod,但 foo 和 main 都无法访问 facebook iOS API。如果我在 foo 模块中添加相同的 pod,它也无法访问 Facebook API。

或者我应该使用 cocoapods 以外的其他依赖管理工具吗?

【问题讨论】:

    标签: kotlin-multiplatform kotlin-multiplatform-mobile


    【解决方案1】:

    您只能导出单个 Kotlin Xcode 框架。它是一种具有所有依赖项的“大二进制文件”。如果“utils 模块”和“foo 模块”都是 Kotlin 模块,您应该将它们收集到一个单独的 Kotlin Xcode 框架中。

    【讨论】:

    • 谢谢。我需要的场景是一个使用 Facebook Core API 的核心 kotlin 模块,以及一个使用 Facebook Core & Login API 和我的核心模块的登录 kotlin 模块。所有这些最终都会作为单个库导出到 Xcode 中。
    【解决方案2】:

    我猜你最后想要Export dependencies to binaries 这样的东西。但是,我不确定这是否适用于 Kotlin 模块之间的依赖关系。对于它们之间的依赖关系,我建议使用 api 依赖关系 link 并分别为每个模块添加 pod。
    我的意思是,核心模块的 build.gradle.kts 应该只包含

    ...
    kotlin {
        ios()
    
        cocoapods {
            ios.deploymentTarget = "13.5"
    
            summary = "CocoaPods test library"
            homepage = "https://github.com/JetBrains/kotlin"
    
            pod("FBSDKCoreKit")
        }
    }
    ...
    

    登录模块同时具有 cocoapods 和核心依赖项:

    ...
    kotlin {
        ios()
    
        framework {
                // Mandatory properties
                // Configure fields required by CocoaPods.
                summary = "Some description for a Kotlin/Native module"
                homepage = "Link to a Kotlin/Native module homepage"
                // Framework name configuration. Use this property instead of deprecated 'frameworkName'
                baseName = "MyFramework"
    
                // Optional properties
                // (Optional) Dynamic framework support
                isStatic = false
                // (Optional) Dependency export
                export(project(":core"))
                transitiveExport = true
                // (Optional) Bitcode embedding
                embedBitcode(BITCODE)
            }
            pod("FBSDKCoreKit")
            pod("FBSDKLoginKit")
        }
    ...
        sourceSets {
            val iosMain by getting {
                dependencies {
                    api(project(":core"))
                }
            }
        }
    }
    
    ...
    

    【讨论】:

      猜你喜欢
      • 2019-08-16
      • 1970-01-01
      • 2013-12-27
      • 2016-05-22
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      相关资源
      最近更新 更多