Kotlin Native 项目中 iOS 上的 libPhonenumber(来自 Google)
libPhonenumber (from Google) on iOS in a Kotlin Native project
我一直在努力解决一个问题。
我正在使用 Kotlin Multiplatform (KMP) 构建一个跨平台应用程序(iOS 和 Android),我需要一个来自 Google(https://github.com/google/libphonenumber)的库.
对于 Android,我可以指向 Maven 存储库 (https://repo1.maven.org/maven2/com/googlecode/libphonenumber/libphonenumber/8.12.6/)。
对于 iOS,我可以通过 Cocoapods.(https://cocoapods.org/pods/libPhoneNumber-ios).
使用 libPhonenumber 的 ObjC 端口
但是,我无法使用 Kotlin 的(cocoapod 插件)正确识别 Pod。该插件似乎无法构建。
这是我的设置的详细信息:
- Xcode v11.5
- IntelliJ IDEA v2020.1.2
- 可可pods v1.9.1
- Gradle6.0.1
- 示例回购 (https://github.com/touchlab/kotlin-native)
注意:在回购协议中,我正在使用 ./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
我试过其他libPhoneNumberpods,例如:
- libPhoneNumberSwift
- LT电话号码字段
两者都无法使用 Kotlin 的 cocoapods 插件构建,但在没有 Kotlin 的 cocoapod 插件的情况下作为 Pod 工作。
我错过了什么?
这个特殊问题似乎是由 pod 名称中的破折号引起的。已经报告了一个问题 on GitHub。目前,建议通过重命名模块来解决此问题。改变你的kotlin-library/build.gradle.kts
喜欢
pod("libPhoneNumber-iOS", moduleName = "libPhoneNumber_iOS")
应该有帮助。请试一试,如果有效,请在此处或 GH 上告知。
通过在 IOS 中使用 JavaScriptCore 添加未更改的 Javascript 版本的 libphonenumber,我获得了很好的结果。 Javascript 中尚不可用的库的唯一部分是地理编码器。
我使用了此处解释的概念: https://www.appcoda.com/javascriptcore-swift 。
性能很好,不涉及移植。始终提供最新版本。
我一直在努力解决一个问题。
我正在使用 Kotlin Multiplatform (KMP) 构建一个跨平台应用程序(iOS 和 Android),我需要一个来自 Google(https://github.com/google/libphonenumber)的库.
对于 Android,我可以指向 Maven 存储库 (https://repo1.maven.org/maven2/com/googlecode/libphonenumber/libphonenumber/8.12.6/)。
对于 iOS,我可以通过 Cocoapods.(https://cocoapods.org/pods/libPhoneNumber-ios).
使用 libPhonenumber 的 ObjC 端口但是,我无法使用 Kotlin 的(cocoapod 插件)正确识别 Pod。该插件似乎无法构建。 这是我的设置的详细信息:
- Xcode v11.5
- IntelliJ IDEA v2020.1.2
- 可可pods v1.9.1
- Gradle6.0.1
- 示例回购 (https://github.com/touchlab/kotlin-native) 注意:在回购协议中,我正在使用 ./samples/cocoapods
- 修改./samples/cocoapods/kotlin-library/build.gradle.kts
注释掉 AFNetworking,删除 AFNetworking pod
pod("AFNetworking", "~> 3.2.0")
添加一个新的 podpod("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
我试过其他libPhoneNumberpods,例如:
- libPhoneNumberSwift
- LT电话号码字段 两者都无法使用 Kotlin 的 cocoapods 插件构建,但在没有 Kotlin 的 cocoapod 插件的情况下作为 Pod 工作。
我错过了什么?
这个特殊问题似乎是由 pod 名称中的破折号引起的。已经报告了一个问题 on GitHub。目前,建议通过重命名模块来解决此问题。改变你的kotlin-library/build.gradle.kts
喜欢
pod("libPhoneNumber-iOS", moduleName = "libPhoneNumber_iOS")
应该有帮助。请试一试,如果有效,请在此处或 GH 上告知。
通过在 IOS 中使用 JavaScriptCore 添加未更改的 Javascript 版本的 libphonenumber,我获得了很好的结果。 Javascript 中尚不可用的库的唯一部分是地理编码器。 我使用了此处解释的概念: https://www.appcoda.com/javascriptcore-swift 。 性能很好,不涉及移植。始终提供最新版本。