Как использовать Crashlytics с расширениями просмотра iOS / OS X сегодня?

Поскольку сегодня расширения работают как отдельный процесс, я уверен, что они не будут регистрировать сбои из коробки. Я предполагаю, что нам нужно отдельно инициализировать Crashlytics для виджета. Например. в viewDidLoad методе TodayViewController.

  • Кто-нибудь уже использует Crashlytics внутри каких-либо расширений iOS / OS X? Если да, то как вы это реализовали?
  • Мне также интересно, имеет ли смысл создавать отдельное приложение в Crashlytics только для расширения.

person martn_st    schedule 26.11.2014    source источник
comment
Я не смог использовать почти что-либо внутри расширений (Flurry не работает, crashlytics не работает, и даже файл .h, который у меня есть с некоторыми макросами asssert, не работает ...)   -  person wolffan    schedule 26.11.2014
comment
Это вопрос службы поддержки Crashlytics. Пожалуйста, свяжитесь с ними напрямую.   -  person Kerni    schedule 26.11.2014
comment
@wolffan, это пока неутешительно.   -  person martn_st    schedule 26.11.2014
comment
@Kerni, насколько я знаю, они просят людей создавать проблемы здесь, в stackoverflow, с их тегами. Однако я больше не могу найти цитату ... так что могу ошибаться.   -  person martn_st    schedule 26.11.2014


Ответы (5)


Служба поддержки Crashlytics связалась со мной и предоставила следующие шаги. Я протестировал их, и теперь у меня работает приложение iOS 8.

  1. Добавьте этап сборки сценария запуска Crashlytics в цель вашего расширения (скопируйте / вставьте то же, что вы добавили в основное приложение)

  2. Добавьте Crashlytics.framework в связанные библиотеки вашего расширения (например, просто проверьте цель расширения в инспекторе файлов)

  3. Добавьте Crashlytics.startWithAPIKey("yourApiKey") в initWithCodermethod контроллера представления вашего расширения. (В сегодняшнем шаблоне расширения Apple он по умолчанию называется TodayViewController)

    > если у вас еще нет initWithCoder метода, он должен выглядеть следующим образом:

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Crashlytics.startWithAPIKey("yourApiKey")
    }
    
person martn_st    schedule 26.11.2014
comment
Забыл упомянуть: поскольку каждое расширение должно иметь собственный идентификатор пакета, Crashlytics в любом случае создает отдельное приложение на панели инструментов самостоятельно. - person martn_st; 26.11.2014
comment
Для меня это не удается в 50% случаев. Это может быть проблема с несколькими расширениями (Today и Watch). По сути, мне нужно постоянно перестраивать свой проект, потому что он терпит неудачу из-за того, что Crashlytics не находит dSYM каждый раз. - person cyphers; 04.06.2015
comment
Как это может быть? Я делаю Fabric.with([Crashlytics.self]) внутри init(coder aDecoder: NSCoder), там сказано [Fabric] [Fabric +with] called multiple times. Only the first call is honored, please pass all kits you wish to initialize - person Oleksii Nezhyborets; 05.08.2017
comment
Вызывает ли Crashlytics вызов CrashlyticsDelegate при предыдущем сбое расширения приложения? stackoverflow.com/q/61801745/9636 - person Heath Borders; 14.05.2020

Вот собственное руководство Twitter по его реализации:

https://twittercommunity.com/t/integrate-fabric-crashlytics-with-ios-8-extension/28905

Итак, скопируйте библиотеки, например, если вы используете CocoaPods, вы можете добавить Fabric и Crashlytics к цели расширения:

В подфиле:

target :TodayExtension do
  pod 'Fabric'
  pod 'Crashlytics'
end

и запустите pod install. И не забудьте установить Build Active Architecture Only на NO, иначе вы можете получить ошибки компоновщика

Затем в вашем TodayViewController:

#import <Fabric/Fabric.h>
#import <Crashlytics/Crashlytics.h>

...

-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    [Fabric with:@[CrashlyticsKit]];
    return self;
}

и скопируйте Fabric Run Script на этапах сборки в целевое значение Today Extension и скопируйте запись Fabric из информационного списка из основного приложения в информационный список вашего Today Extension.

person andrrs    schedule 17.08.2015
comment
это то, что я забыл скопировать сценарий запуска Fabric на этапах сборки в целевое расширение Today Extension - person Constantin Saulenco; 03.02.2017

Вот официальное практическое руководство. описал, как использовать Crashlytics в расширениях iOS:

  • Добавьте эту строку в свой viewController initWithCoder метод Fabric.with([Crashlytics.self])
  • Скопируйте словарь «Fabric» из Info.plist вашего основного приложения и вставьте в Info.plist вашего расширения.
  • Скопируйте / вставьте этап сборки запуска сценария из целевого объекта основного приложения в этап сборки сценария запуска вашего расширения.

И ... тебе хорошо!

person Valentin Shergin    schedule 23.06.2016
comment
Еще одна ошибка: вы должны включить ответы на панели инструментов Fabric для расширения. Не знаю, является ли эта информация частью приведенного выше руководства, так как меня приветствуют Извините, у вас нет доступа к этой теме! когда перехожу по ссылке. - person bfx; 26.06.2017

Ответ от maremmle также работает, если вы хотите добавить Crashlytics для обмена расширениями на iOS 8.0+. Просто не забудьте поместить[Crashlytics startWithAPIKey:@"apiKey"]; внутрь init метода вашего первого ViewController.

person edulpn    schedule 19.05.2015

Спасибо за все инструкции, он отлично работает в моем расширении Share.

Я заметил, что для моего расширения Share на панели управления Fabric Answers не отображались фактические данные для:

  1. Активные пользователи
  2. Среднее общее время, проведенное в приложении на пользователя

Это действительно для приложения-компаньона. Так что мне было интересно, как SDK ответов это определит. Наиболее логичным кажется мониторинг уведомлений UIApplication. Поскольку жизненный цикл расширения связан с ViewController, эти уведомления UIApplication не публикуются. Следовательно, Fabric не знает, когда расширение активно.

Поэтому я реализовал следующее решение, которое предоставляет вышеуказанные данные на панели инструментов Fabric:

  1. В viewDidLoad основного ViewController расширений опубликуйте UIApplicationDidBecomeActiveNotification, который запустит запуск Fabric.
  2. Перед закрытием расширения (с помощью completeRequestReturningItems: completionHandler: или cancelRequestWithError:) опубликовать UIApplicationWillResignActiveNotification. Это вызовет остановку ткани.

Обратите внимание, что существует задержка между действием на устройстве и появлением данных на панели инструментов. Специально для активных пользователей. После представления расширения это займет около 20–30 секунд. Но когда расширение закрывается, может пройти до 5 минут, прежде чем количество активных пользователей будет уменьшено.

person Martijn    schedule 24.05.2017