Kotlin Native 项目中 iOS 上的 libPhonenumber(来自 Google)

Posted

技术标签:

【中文标题】Kotlin Native 项目中 iOS 上的 libPhonenumber(来自 Google)【英文标题】:libPhonenumber (from Google) on iOS in a Kotlin Native project 【发布时间】:2020-10-25 10:02:55 【问题描述】:

我一直在努力解决一个问题。

我正在使用 Kotlin Multiplatform (KMP) 构建一个跨平台应用程序(iosandroid),我需要一个来自 Google (https://github.com/google/libphonenumber) 的库。

对于 Android,我可以指向一个 Maven 存储库 (https://repo1.maven.org/maven2/com/googlecode/libphonenumber/libphonenumber/8.12.6/)。

对于 iOS,我可以通过 Cocoapods 使用 ObjC 端口的 libPhonenumber。(https://cocoapods.org/pods/libPhoneNumber-ios)。

但是,我无法使用 Kotlin 的(cocoapod 插件)正确识别 Pod。该插件似乎无法构建。 这是我的设置的详细信息:

    Xcode v11.5 IntelliJ IDEA v2020.1.2 Cocoapods v1.9.1 Gradle 6.0.1 示例回购 (https://github.com/touchlab/kotlin-native) 注意:在 repo 中,我使用的是 ./samples/cocoapods 修改 ./samples/cocoapods/kotlin-library/build.gradle.kts 注释掉 AFNetworking,删除 AFNetworking pod pod("AFNetworking", "~> 3.2.0") 添加一个新的 pod pod("libPhoneNumber-iOS") 修改 ./samples/cocoapods/kotlin-library/gradle.properties 改变这一行: kotlin.native.home=../../../dist 对此: #kotlin.native.home=../../../dist 在此文件夹中的终端中:./samples/cocoapods/kotlin-library/ ./gradlew podspec 这会在 ./samples/cocoapods/kotlin-library/build/cocoapods/defs/ 中创建一个 podspec 文件 (libPhoneNumber-iOS.def) cd 从 kotlin-library 到 ios-app 文件夹 cd ../ios-app/ 使用以下命令安装 Pod: pod install 您会看到如下内容:
Downloading dependencies
Installing kotlin_library (1.0)
Installing libPhoneNumber-iOS (0.9.15)
Generating Pods project
Integrating client project
Pod installation complete! There is 1 dependency from the Podfile and 2 total pods installed.

当我在 Xcode 中构建示例“ios-app”目标:模拟器时,我收到错误: fatal error: module 'libPhoneNumber' not found

我尝试过其他 libPhoneNumber pod,例如:

libPhoneNumberSwift LTPhoneNumber 字段 两者都无法使用 Kotlin 的 cocoapods 插件构建,但在没有 Kotlin 的 cocoapod 插件的情况下作为 Pod 工作。

我错过了什么?

【问题讨论】:

【参考方案1】:

这个特殊问题似乎是由 pod 名称中的破折号引起的。已经报告了一个问题on GitHub。目前,建议通过重命名模块来解决此问题。更改您的kotlin-library/build.gradle.kts 喜欢

 pod("libPhoneNumber-iOS", moduleName = "libPhoneNumber_iOS")  

应该有帮助。请试一试,并在此处或在 GH 上告诉它是否有效。

【讨论】:

【参考方案2】:

我通过在IOS中使用javascriptCore添加未更改的Javascript版本的libphonenumber获得了出色的结果。 Javascript 中尚不可用的库的唯一部分是地理编码器。 我使用了这里解释的概念:https://www.appcoda.com/javascriptcore-swift。 性能很棒,并且不涉及移植。始终提供最新版本。

【讨论】:

以上是关于Kotlin Native 项目中 iOS 上的 libPhonenumber(来自 Google)的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin Multiplatform Mobile:Ktor - 如何在 Kotlin Native(iOS)中取消活动协程(网络请求、后台工作)?

如何使用 Kotlin/native 生成​​依赖于另一个的 .framework?

如何在 Kotlin Native 中使用 Http Request 库

kotlin.native.concurrent.InvalidMutabilityException:在 Kotlin Multiplatform (iOS) 中使用 ktor 时冻结 <ob

Kotlin 一统天下?Kotlin/Native 开始支持 iOS 和 Web 开发

Kotlin/Native 无法导入 io.ktor.network.selector.ActorSelectorManager