yandexmobile / metrica-sdk-ios

AppMetrica is a free real-time ad tracking and mobile app analytics solution.
https://tech.yandex.com/metrica-mobile-sdk/
Other
73 stars 15 forks source link

Динамический фреймверк аппметрики не компилируется на девайсе #52

Closed mezhevikin closed 7 years ago

mezhevikin commented 8 years ago

Если использовать динамический фремверк через cocapods, то проект после компиляции не запускается на реальном устройство и выдает ошибку:

This application's bundle identifier does not match its code signing identifier.

Подключаю так:

abstract_target 'defaults' do
    pod 'YandexMobileMetrica/Dynamic'
    target 'AppmetrikaBug'
end

Чтобы вам легко было воспроизвести проблему, создал специальный проект для демонстрации бага - https://github.com/mezhevikin/AppmetrikaBug

При этом стоит отметить что если скомиплировать ipa adhoc файл, то файл устанавливается на устройство, на симуляторе тоже все работает, такая ошибка выскакивает если выбрать реальное устройство.

bamx23 commented 8 years ago

Спасибо за подробное описание проблемы. Подскажите, какая у Вас версия Xcode? Со своей стороны (Xcode 8): Ваш проект склонировал, установил поды, выбрал подходящую Signing Team, собрал проект для iOS 8.4 - всё запустилось без проблем. Собранный в ipa-файл архив также установился через iTunes без проблем. Смею предположить, что Вам стоит обратить внимание на аттрибуты подписи Вашего приложения. Ошибка, описанная выше, говорит о том, что bundle ID у provisioning profile и signing certificate, использованные для подписи, не соответствуют bundle ID в Info.plist приложения.

mezhevikin commented 8 years ago

@bamx23 xcode 8.0. C остальными проектами использующими cocpods нет проблем. Я не генерировал отдельные provision профайлы для этого тестового проекта, стоит галочка автоматическая подпись и выбран мой девелоперский аккаунт. Вот сделал видео для демонстрации проблемы и показываю какие у меня настройки - https://www.dropbox.com/s/huw3qq4tqd68kwj/demo.mov?dl=0

mezhevikin commented 8 years ago

Сейчас попробовал вот такие - (скрин - http://rgho.st/7Jj9C2yQj/image.png) build settings поставить, не помогло

mezhevikin commented 8 years ago

@bamx23 Еще доп информация:

  1. Пошел в appstore и проверил последняя ли версия xcode. последняя
  2. Попробовал удалить workspace и папку Pods и сделать pod install. Не помогло
  3. Попробовал подключить другой iphone. Не помогло
  4. Нажал на иконку i напротив provision provile, с идентификатором вроде тоже все в поряде. Скриншот - http://rgho.st/6NR26Vh8C/image.png
bamx23 commented 8 years ago

А можно увидеть полный лог сборки? Может быть не происходит подписи динамического фреймворка. И ещё, какая у Вас версия macOS?

mezhevikin commented 8 years ago

@bamx23 можно, только подскажите где его взять?

mac 0s - 10.11.6 (15G1004) xcode - 8.0 (8A218a) cocapods - 1.1.1 на обоих устройствам ios 9.3.5

mezhevikin commented 8 years ago

https://www.dropbox.com/s/0773vqhvkhjl22z/Build%20AppmetrikaBug_2016-10-21T18-11-38.rtf?dl=0 вроде оно

bamx23 commented 8 years ago

По логу похоже, что всё тоже в порядке. Можете приложение /Users/mezhevikin/Library/Developer/Xcode/DerivedData/AppmetrikaBug-farcconlnqmjpyelhqievliipikl/Build/Products/Debug-iphoneos/AppmetrikaBug.app передать архивом?

mezhevikin commented 8 years ago

@bamx23 https://www.dropbox.com/s/wn4wc8yif5d4sk5/AppmetrikaBug.zip?dl=0

bamx23 commented 8 years ago

На первый взгляд всё также хорошо. Сейчас нет возможности проверить на устройстве, но я узнаю, что именно не так с собранным приложением.

mezhevikin commented 8 years ago

@bamx23 спасибо. буду ждать ответа

mezhevikin commented 8 years ago

@bamx23 Привет. Я создал новый проект и провел небольшой экспиремент где коммитил каждый шаг - https://github.com/mezhevikin/AppmetrikaBug2/commits/master .

1. Создал пустой проект. Он запускается на реальном устройстве

2. Добавил podfile с одной зависимость alamofire, сделал pod install. Приложение все еще запускается на устройстве

3. Попробовал добавить статическую библиотеку pod 'YandexMobileMetrica'. Приложение запускается на устройстве

4. Теперь заменил на pod 'YandexMobileMetrica/Dynamic' . Приложение больше не запускается на устройстве и выдает ошибку.

5. Вернул обратно статическую библиотеку pod 'YandexMobileMetrica', но проект больше не запускается на устройстве и выдает ту же ошибку. То есть когда происходит pod install в прошлом коммите это ломает проект и после этого он уже не запускается на реальном устройстве даже после удалении библиотеки.

mezhevikin commented 8 years ago

@bamx23 Извини в последнем пункте ложную инфу дал. после Product -> clean статическая библиотека таки запустилась.

bamx23 commented 8 years ago

Ваша сборка на моё устройство не установится, т.к. provisioning profile не содержит его id. Можете попробовать собрать чистый проект, куда динамический фреймворк AppMetrica будет подключен напрямую, минуя CocoaPods, дабы исключить влияние последнего на процесс сборки. Ссылка для скачивания: YandexMobileMetrica-2.6.2-ios-51ddba1a-89bd-4da8-b4ae-771d60a317f0.zip. Надо добавить в проект фреймворк из директории dynamic.

bamx23 commented 8 years ago

Нашел проблему. Во время сборки динамического фреймворка в бинарном файле был использован другой BundleID относительно Info.plist. Исправим данную проблему в следующем релизе. Спасибо Вам за помощь!

Сейчас, чтобы решить локально эту проблему, добавьте в Ваш Podfile следующий хук:

post_install do |installer|
    appmetricaPlistPath = "Pods/YandexMobileMetrica/dynamic/YandexMobileMetrica.framework/Info.plist"
    appmetricaVersion = `/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' #{appmetricaPlistPath}`.strip
    if ['2.6.0', '2.6.1', '2.6.2'].include? appmetricaVersion
        system("/usr/libexec/PlistBuddy -c 'Set :CFBundleIdentifier org.cocoapods.YandexMobileMetrica' #{appmetricaPlistPath}")
        system("plutil -convert binary1 #{appmetricaPlistPath}")
    else
        puts("Please, remove workaround for AppMetrica dynamic framework.")
    end
end
mezhevikin commented 8 years ago

@bamx23 Спасибо. Вы молодец. Буду ждать update. Хук тоже работает.

Кстати я создавал issue по поводу варингов, надеюсь поправите заодно. Не мешает, но глаза мазолит.

/Users/mezhevikin/Desktop/Projects/Dreams/ios/Pods/YandexMobileMetrica/dynamic/YandexMobileMetrica.framework/Headers/YMMYandexMetricaConfiguration.h:30:1: Conflicting nullability specifier on return types, 'nullable' conflicts with existing specifier 'nonnull'
/Users/mezhevikin/Desktop/Projects/Dreams/ios/Pods/YandexMobileMetrica/dynamic/YandexMobileMetrica.framework/Headers/YMMYandexMetricaPreloadInfo.h:18:1: Conflicting nullability specifier on return types, 'nullable' conflicts with existing specifier 'nonnull'
bamx23 commented 8 years ago

Да, конечно

bamx23 commented 7 years ago

Можете обновиться до версии 2.6.5, там решили эту проблему.