libPhonenumber (от Google) на iOS в проекте Kotlin Native

Я изо всех сил пытался решить проблему.

Я создаю кроссплатформенное приложение (iOS и Android) с использованием Kotlin Multiplatform (KMP), где мне нужна библиотека от Google (https://github.com/google/libphonenumber).

Для Android я могу указать на репозиторий Maven (https://repo1.maven.org/maven2/com/googlecode/libphonenumber/libphonenumber/8.12.6/).

Для iOS я могу использовать ObjC-порт libPhonenumber через Cocoapods. (https://cocoapods.org/pods/libPhoneNumber-ios).

Но я не могу использовать Kotlin (плагин cocoapod), чтобы правильно распознать Pod. Плагин не может быть собран. Вот подробности моей настройки:

  1. Xcode v11.5
  2. IntelliJ IDEA версии 2020.1.2
  3. Cocoapods v1.9.1
  4. Gradle 6.0.1
  5. Образец репо (https://github.com/touchlab/kotlin-native) ПРИМЕЧАНИЕ. Внутри репо, я использую ./samples/cocoapods
  6. изменить ./samples/cocoapods/kotlin-library/build.gradle.kts закомментировал AFNetworking, удалить модуль AFNetworking pod("AFNetworking", "~> 3.2.0") добавить новый модуль pod("libPhoneNumber-iOS")
  7. изменить ./samples/cocoapods/kotlin-library/gradle.properties измените эту строку: kotlin.native.home=../../../dist на это: #kotlin.native.home=../../../dist
  8. в Терминале в этой папке: ./samples/cocoapods/kotlin-library/ ./gradlew podspec Это создает файл podspec (libPhoneNumber-iOS.def) в ./samples/cocoapods/kotlin-library/build/cocoapods/defs/
  9. компакт-диск из библиотеки kotlin в папку ios-app cd ../ios-app/
  10. Установите 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.

Когда я создаю образец target: simulator ios-app в Xcode, я получаю сообщение об ошибке: fatal error: module 'libPhoneNumber' not found

Я пробовал другие модули libPhoneNumber, например:

  • libPhoneNumberSwift
  • LTPhoneNumberField Оба не могут быть построены с использованием плагина cocoapods Kotlin, но работают как Pod без плагина cocoapod Kotlin.

Что мне не хватает?


person Larry B    schedule 05.07.2020    source источник


Ответы (2)


Эта конкретная проблема, по-видимому, вызвана тире в имени модуля. О проблеме уже сообщалось на GitHub. На данный момент рекомендуется решить эту проблему, переименовав модуль. Изменение вашего kotlin-library/build.gradle.kts лайка

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

должно помочь. Пожалуйста, попробуйте и расскажите здесь или на GH, если это работает.

person Artyom Degtyarev    schedule 13.07.2020

Я получил отличные результаты, добавив неизмененную версию libphonenumber для Javascript с помощью JavaScriptCore в IOS. Единственная часть библиотеки, которая еще не доступна в Javascript, - это геокодер. Я использовал концепцию, описанную здесь: https://www.appcoda.com/javascriptcore-swift . Производительность отличная, портирование не требуется. Всегда доступна последняя версия.

person user1479738    schedule 11.01.2021