yandexmobile / metrica-plugin-unity

Unity plugin for Yandex AppMetrica SDK
38 stars 18 forks source link

Can't build iOS app (latest Unity 2018, xcode 10.2, plugin 3.3.0) #24

Closed hippogamesunity closed 5 years ago

hippogamesunity commented 5 years ago

Привет! У меня не получается собрать проект с вашим плагином в xcode. Проект на последней версии Unity 2018, xcode тоже последней версии. При сборке в xcode получаю такие ошибки (как для armv7, так и для arm64). Deployment Target пробовал и 9, и 10, и 12.2.

Использовался плагин метрики последней версии (3.3.0). Удается собрать, если вручную добавить libz и CoreLocation в Build Phases. Тем не менее, приложение крашится при запуске. После отката на плагин версии 3.2.2 (под вопросом, см. ниже) все собирается автоматически (без ручных добавлений) и запускается без проблем.

BTW подскажите, как определить версию плагина в Unity? Не нашел никаких признаков, кроме упоминания версии в файле в mobmetricalib-3.6.0.aar.meta (при том, что плагин скачивался версии 3.3.0). После отката на версию с mobmetricalib-3.2.2.aar.meta все собралось, залилось и опубликовалось в App Store.

Undefined symbols for architecture armv7:

   "_inflateInit2_", referenced from:

       -[YMMGZipDataEncoder decodeData:error:] in YandexMobileMetrica(YMMGZipDataEncoder.o)

      (maybe you meant: _z_inflateInit2_, _il2cpp_z_inflateInit2_ )

   "_inflateEnd", referenced from:

       -[YMMGZipDataEncoder decodeData:error:] in YandexMobileMetrica(YMMGZipDataEncoder.o)

      (maybe you meant: _unity_z_inflateEnd, _il2cpp_z_inflateEnd )

   "_deflate", referenced from:

       -[YMMGZipDataEncoder encodeData:error:] in YandexMobileMetrica(YMMGZipDataEncoder.o)

      (maybe you meant: _unity_z_deflate_copyright, _unity_z_deflateTune , _unity_z_deflatePrime , _unity_z_deflateGetDictionary , _unity_z_deflateSetDictionary , _unity_z_deflateParams , _z_deflateInit_ , _il2cpp_z_deflateCopy , _il2cpp_z_deflateBound , _il2cpp_z_deflateParams , _il2cpp_z_deflatePending , _il2cpp_z_deflateGetDictionary , _il2cpp_z_deflateSetDictionary , _il2cpp_z_deflateResetKeep , _il2cpp_z_deflateReset , _il2cpp_z_deflateInit_ , _unity_z_deflatePending , _il2cpp_z_deflateTune , _unity_z_deflateSetHeader , _il2cpp_z_deflate_copyright , _il2cpp_z_deflate , _il2cpp_z_deflateInit2_ , _il2cpp_z_deflateEnd , _z_deflateInit2_ , _il2cpp_z_deflateSetHeader , _unity_z_deflateEnd , _unity_z_deflate , _unity_z_deflateCopy , _unity_z_deflateResetKeep , _unity_z_deflateReset , _unity_z_deflateBound , _il2cpp_z_deflatePrime )

   "_deflateEnd", referenced from:

       -[YMMGZipDataEncoder encodeData:error:] in YandexMobileMetrica(YMMGZipDataEncoder.o)

      (maybe you meant: _il2cpp_z_deflateEnd, _unity_z_deflateEnd )

   "_CLLocationCoordinate2DMake", referenced from:

       -[YMMEvent restoreFromResultSet:] in YandexMobileMetrica(YMMEvent.o)

   "_kCLLocationAccuracyNearestTenMeters", referenced from:

       -[YMMLocationManager configureLocationManager] in YandexMobileMetrica(YMMLocationManager.o)

   "_OBJC_CLASS_$_CLLocationManager", referenced from:

       objc-class-ref in YandexMobileMetrica(YMMLocationManager.o)

   "_deflateInit2_", referenced from:

       -[YMMGZipDataEncoder encodeData:error:] in YandexMobileMetrica(YMMGZipDataEncoder.o)

      (maybe you meant: _il2cpp_z_deflateInit2_, _z_deflateInit2_ )

   "_deflateBound", referenced from:

       -[YMMGZipDataEncoder encodeData:error:] in YandexMobileMetrica(YMMGZipDataEncoder.o)

      (maybe you meant: _il2cpp_z_deflateBound, _unity_z_deflateBound )

   "_inflate", referenced from:

       -[YMMGZipDataEncoder decodeData:error:] in YandexMobileMetrica(YMMGZipDataEncoder.o)

      (maybe you meant: _unity_z_inflate_copyright, _unity_z_inflateCodesUsed , _unity_z_inflateUndermine , _unity_z_inflateCopy , _unity_z_inflateSyncPoint , _unity_z_inflateSync , _unity_z_inflateSetDictionary , _unity_z_inflateGetDictionary , _unity_z_inflatePrime , _il2cpp_z_inflate_copyright , _z_inflateInit_ , _unity_z_inflate_fast , _unity_z_inflateBack , _il2cpp_z_inflateCodesUsed , _il2cpp_z_inflateValidate , _il2cpp_z_inflateSync , _il2cpp_z_inflate_fast , _il2cpp_z_inflateInit_ , _il2cpp_z_inflateReset , _il2cpp_z_inflateResetKeep , _z_inflateInit2_ , _unity_z_inflateReset2 , _png_zlib_inflate , _unity_z_inflateEnd , _unity_z_inflate , _il2cpp_method_is_inflated , _il2cpp_class_is_inflated , _unity_z_inflateValidate , _il2cpp_z_inflateMark , _il2cpp_z_inflate , _il2cpp_z_inflateInit2_ , _unity_z_inflateMark , _il2cpp_z_inflateGetHeader , _unity_z_inflateReset , _InfTree_inflate_trees_dynamic_m6B0968A8D9D17B2C22D56B927C248BCF5545C530_MetadataUsageId , __Z27scripting_class_is_inflated17ScriptingClassPtr , _unity_z_inflateResetKeep , _InfTree_inflate_trees_bits_mA1E84C3B056A8247DB5DFAA25439685FE7BABD2C , _il2cpp_z_inflateSetDictionary , _il2cpp_z_inflate_table , _il2cpp_z_inflateReset2 , _unity_z_inflateBackEnd , _il2cpp_z_inflatePrime , _InfTree_inflate_trees_fixed_mA329E92666D2BE83B7D902794B3E176820983919_MetadataUsageId , _il2cpp_z_inflateCopy , _unity_z_inflateBackInit_ , _InfTree_inflate_trees_fixed_mA329E92666D2BE83B7D902794B3E176820983919 , _InfTree_inflate_trees_dynamic_m6B0968A8D9D17B2C22D56B927C248BCF5545C530 , _il2cpp_z_inflateEnd , _unity_z_inflateGetHeader , _unity_z_inflate_table , _InfTree_inflate_trees_bits_mA1E84C3B056A8247DB5DFAA25439685FE7BABD2C_MetadataUsageId , _il2cpp_z_inflateGetDictionary , _il2cpp_z_inflateUndermine , _il2cpp_z_inflateSyncPoint )

   "_kCLLocationAccuracyHundredMeters", referenced from:

       -[YMMLocationManager configureLocationManager] in YandexMobileMetrica(YMMLocationManager.o)

   "_OBJC_CLASS_$_CLLocation", referenced from:

       objc-class-ref in YMMBridge.o

       objc-class-ref in YandexMobileMetrica(YMMEvent.o)

 ld: symbol(s) not found for architecture armv7

 clang: error: linker command failed with exit code 1 (use -v to see invocation)
NesterovichAlexey commented 5 years ago

Привет.

BTW подскажите, как определить версию плагина в Unity? Не нашел никаких признаков, кроме упоминания версии в файле в mobmetricalib-3.6.0.aar.meta (при том, что плагин скачивался версии 3.3.0). После отката на версию с mobmetricalib-3.2.2.aar.meta все собралось, залилось и опубликовалось в App Store.

mobmetricalib-3.6.0.aar.meta тут версия означает версию нативного СДК, который используется в плагине. Действительно нигде не написана версия плагина. Единственный способ узнать версию плагина это найти в changelog версию с пунктом Updated native SDKs (iOS 3.6.0, Android 3.6.0), где после Android текст совпадает с версией в названии файла mobmetricalib-3.6.0.aar.meta. Например, версия плагина с файлом mobmetricalib-3.2.2.aar.meta будет равна 3.1.0. В следующей версии добавим явное значение версии плагина, чтобы было проще определять.

У тебя действительно использовалась для версий плагина 3.3.0 и 3.1.0 одинаковая последняя версии Unity 2018 (а именно 2018.4.3f1)? Можешь перепроверить?

Дело в том, что у меня на Unity 2018.4.3f1 все работает, но вот на Unity 2019.3.0a6 нет и ошибка такая как и у тебя. Причем и для версии 3.1.0 тоже. Для версии 2019.3.0a6 проблема в том, что unity немного сломало api и способ, который добавлял нужные фрэймворки, не работает начиная с Unity 2019.3. В Unity появляется ошибка (не знаю почему не падает сборка): image Чтобы её решить надо в файле Assets/AppMetrica/Editor/PostprocessBuildPlayerAppMetrica.cs заменить 62 строчку на:

#if UNITY_2019_3_OR_NEWER
            var target = project.GetUnityFrameworkTargetGuid ();
#else
            var target = project.TargetGuidByName ("Unity-iPhone");
#endif
hippogamesunity commented 5 years ago

У меня Unity 2018.4.3f1. С последней версией AppMetrica.unitypackage (Apr 29, 2019) не собирается. С предпоследней (Nov 27, 2018) все собралось и запустилось без танцев с бубном.

hippogamesunity commented 5 years ago

На Unity 2019 еще не перешел, рановато)

hippogamesunity commented 5 years ago

В принципе, я могу выложить 2 проекта для xcode с обеими версиями плагина, сами попробуете собрать.

NesterovichAlexey commented 5 years ago

Странно. Ни зависимости, ни скрипты сборки не менялись. Проблема в том, что оно почему-то не выполняет скрипт https://github.com/yandexmobile/metrica-plugin-unity/blob/master/YandexMetricaPluginSample/Assets/AppMetrica/Editor/PostprocessBuildPlayerAppMetrica.cs#L49 и не добавляет нужные фрэймворки. Думаю, если проделать вручную то, что делает скрипт, должно заработать.

Можешь скинуть твои Player Settings для iOS? (можно и на почту) А пробовал создать новый проект и подключить туда плагин? Тоже не собирается?

hippogamesunity commented 5 years ago

Проверил сначала чистый проект в 2018.4.3f1 + плагин 330, все собралось. Затем стал разбираться со своим проектом - и он собрался с плагином 330. Вероятно, я мог не удалить папку AppMetrica перед обновлением. Так часто бывает с другими плагинами, что после такого обновления все перестает работать. После удаления AppMetrica и импорта плагина проблемы нет.