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

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

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

5 ответов

Решение

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

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

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

  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 к цели Extension:

В подфиле:

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;
}

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

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

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

И... ты в порядке!

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

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

Я заметил, что для моего Расширения общего доступа на панели инструментов "Ответы на ткани" не отображаются фактические данные для:

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

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

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

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

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

Другие вопросы по тегам