mapkit-ios-demo icon indicating copy to clipboard operation
mapkit-ios-demo copied to clipboard

Carthage Ошибка. Устанавливаем через Carthage.

Open ARGAMX opened this issue 4 years ago • 4 comments

YandexMapKit (3.5.0)

Cartfile:

github "yandex/mapkit-ios-demo"

Terminal:

iMac-Argus:Motiv-iOS-Sources argus$ carthage update --platform iOS *** Cloning mapkit-ios-demo *** Checking out mapkit-ios-demo at "v3.4" *** xcodebuild output can be found in /var/folders/nb/9g4bcynn1bbbl93rrd7nns4h0000gn/T/carthage-xcodebuild.iZEl6B.log *** Skipped building mapkit-ios-demo due to the error: Dependency "mapkit-ios-demo" has no shared framework schemes for any of the platforms: iOS

If you believe this to be an error, please file an issue with the maintainers at https://github.com/yandex/mapkit-ios-demo/issues/new iMac-Argus:Motiv-iOS-Sources argus$

Ошибка при установке через Carthage.

ARGAMX avatar Mar 31 '20 18:03 ARGAMX

Жаль, что как-то нет никакого опыта по этой проблеме ни у кого и никаких рекомендаций. На Stackoverflow даже такого топика не существует.

В общем, самостоятельно повоевал с этой проблемой, получилось установить Yandex MapKit без CocoaPods, через Carthage. Не все гладко, но у меня получилось на Xcode 11.2.1 и также на Xcode 11.5, Swift 5.X.

Итак:

1. Добавляем в Cartfile записи:

binary "https://raw.githubusercontent.com/ARGAMX/Carthage-Specs/master/iOS/YandexMapKit.json"
binary "https://raw.githubusercontent.com/ARGAMX/Carthage-Specs/master/iOS/YandexRuntime.json"

Пояснения по этим json в самом конце инструкции.

2. Запускаете обновление Сarthage зависимостей в проекте. (carthage update --platform iOS)

3. Добавляем фреймворки в проект: перетаскиваем из папки Carthage файлы: YandexMapKit.framework, YandexRuntime.framework.

4. В свойствах проекта, General -> Framewporks фреймворки, по-умолчанию, добавляются как Do Not Embed. Не трогаем, оставляем Do Not Embed.

5. Прописываем в AppDelegate import YandexMapKit и YMKMapKit.setApiKey("your_Yandex_MapKit_key")

6. Пробуем собрать/запустить.

7. Если не работает, получаем ошибки/краш, то в Target -> Build Settings -> Other Linker Flags добавляем -lc++. Пробуем запустить. 8. Если не работает, получаем ошибки/краш, то в Other Linker Flags добавляем -all_load. Пробуем запустить. 9. Если не работает, получаем ошибки/краш, то в AppDelegate дописываем import CoreLocation, import CoreTelephony, import SystemConfiguration после import YandexMapKit. Пробуем запустить. 10. Если не работает, получаем ошибки/краш, то в Other Linker Flags добавляем $(inherited). Пробуем запустить. 11. Если не работает, получаем ошибки/краш, то добавляем запись STRIP_BITCODE_FROM_COPIED_FILES=NO в Build Settings (https://stackoverflow.com/questions/32071209/xcode-7-bitcode-strip-error). Пробуем запустить. 12. Если не работает, получаем ошибки/краш, делаем Clean Build Folder и удаляем Derived Data. Пробуем запустить. 13. Если не работает, получаем ошибки/краш, гуглим ошибки. На этом этапе у меня заработало и больше я ничего не предпринимал. Поэтому решил написать инструкцию для вас, которую вы сейчас читаете. 14. Если ничего так и не выходит и руки уже опускаются, качаем демо-проект и пробуем собрать его: https://github.com/ARGAMX/YandexMapKit-iOS-Carthage-Demo

Эту инструкцию не стесняйтесь копировать, дополнять и распространять.

=========================================================================

По поводу содержимого Cartfile:

binary "https://raw.githubusercontent.com/ARGAMX/Carthage-Specs/master/iOS/YandexMapKit.json"
binary "https://raw.githubusercontent.com/ARGAMX/Carthage-Specs/master/iOS/YandexRuntime.json"

Эти json файлы - YandexMapKit.json и YandexRuntime.jsoт - созданы мной и теперь, по сути, мне их курировать. В них нужно своевременно добавлять новые версии MapKit, когда они будут выходить.

Вполне возможно, что в будущем я буду забывать это делать. Не стесняйтесь форкнуться (https://github.com/ARGAMX/Carthage-Specs) и обновлять их самостоятельно в своем репозитории. На момент создания они поддерживают только версию MapKit 3.4.0 и 3.5.0.

Пути до файлов framework.zip, которые прописаны в этих json, я брал из файла Podspec (из Cocoapods). Отсюда: https://github.com/CocoaPods/Specs/tree/master/Specs/5/7/2/YandexRuntime https://github.com/CocoaPods/Specs/tree/master/Specs/2/3/4/YandexMapKit Например: https://github.com/CocoaPods/Specs/blob/master/Specs/5/7/2/YandexRuntime/3.4/YandexRuntime.podspec.json или https://github.com/CocoaPods/Specs/blob/master/Specs/5/7/2/YandexRuntime/3.5.0/YandexRuntime.podspec.json

ARGAMX avatar Apr 14 '20 08:04 ARGAMX

@ARGAMX добрый день. А с ресурсами этих либ ничего не делали, т.е. не добавляли их в Copy Bundle Resources? Прохожу по вашим шагам, но всегда получаю ошибки компиляции.

AppleFlash avatar Jun 25 '20 08:06 AppleFlash

@ARGAMX добрый день. А с ресурсами этих либ ничего не делали, т.е. не добавляли их в Copy Bundle Resources? Прохожу по вашим шагам, но всегда получаю ошибки компиляции.

Добрый день. Нет, ничего не делал. Попробуйте демо проект.

ARGAMX avatar Jun 25 '20 14:06 ARGAMX

После долгих ресерчей получилось залинковать библиотеку Однако, запросы не отрабатывали в модулях... Все оказалось просто – эта строка не опциональна, а обязательна (Как минимум для suggest):

/** ** You can optionaly customize locale. ** Otherwise MapKit will use default location. */ YMKMapKit.setLocale("en_US")

Надеюсь, кому-то это будет полезно

Странно, что нет адекватной документации к iOS SDK

nickaroot avatar Oct 14 '20 01:10 nickaroot