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


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

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

5 ответов:

Поддержка Crashlytics связалась со мной и обеспечила эти шаги. Я протестировал их, и теперь это работает для меня iOS 8 app.

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

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

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

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

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Crashlytics.startWithAPIKey("yourApiKey")
    }
    

Вот собственное руководство 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;
}

И скопируйте структуру сценарий запуска на этапах сборки в целевой объект расширения Today, а затем скопируйте запись структуры из списка info plist из основного приложения в список info plist вашего расширения Today

Вот официальный how-to описал, как использовать Crashlytics в расширениях iOS:

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

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

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

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

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

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

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

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

  1. в 'viewDidLoad' расширения main ViewController, post UIApplicationDidBecomeActiveNotification, который вызовет запуск для Fabric.
  2. до закрытия расширения (через completeRequestReturningItems: completionHandler: или cancelRequestWithError:) post UIApplicationWillResignActiveNotification. Это вызовет остановку для ткани.

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